{
  "version": 3,
  "sources": ["../src/platform/shared/pgp-utils.ts", "../src/platform/shared/error-utils.ts", "../src/utils/lazy-import.ts", "../src/utils/crypto-utils.ts", "../src/crypto/services/WalletKeyEncryptionService.ts", "../src/crypto/ecies/constants.ts", "../src/crypto/ecies/interface.ts", "../src/crypto/ecies/utils.ts", "../src/crypto/ecies/base.ts", "../src/crypto/ecies/browser.ts", "../src/platform/browser.ts", "../src/index.node.ts", "../src/contracts/contractController.ts", "../src/generated/abi/ComputeEngineImplementation.ts", "../src/generated/abi/DataRegistryImplementation.ts", "../src/generated/abi/TeePoolPhalaImplementation.ts", "../src/generated/abi/DataPortabilityPermissionsImplementation.ts", "../src/generated/abi/DataPortabilityServersImplementation.ts", "../src/generated/abi/DataPortabilityGranteesImplementation.ts", "../src/generated/abi/DataRefinerRegistryImplementation.ts", "../src/generated/abi/QueryEngineImplementation.ts", "../src/generated/abi/ComputeInstructionRegistryImplementation.ts", "../src/generated/abi/TeePoolEphemeralStandardImplementation.ts", "../src/generated/abi/TeePoolPersistentStandardImplementation.ts", "../src/generated/abi/TeePoolPersistentGpuImplementation.ts", "../src/generated/abi/TeePoolDedicatedStandardImplementation.ts", "../src/generated/abi/TeePoolDedicatedGpuImplementation.ts", "../src/generated/abi/VanaEpochImplementation.ts", "../src/generated/abi/DLPRegistryImplementation.ts", "../src/generated/abi/DLPTreasuryImplementation.ts", "../src/generated/abi/VanaTreasuryImplementation.ts", "../src/generated/abi/DLPRegistryTreasuryImplementation.ts", "../src/generated/abi/VanaPoolStakingImplementation.ts", "../src/generated/abi/VanaPoolEntityImplementation.ts", "../src/generated/abi/VanaPoolTreasuryImplementation.ts", "../src/generated/abi/DATImplementation.ts", "../src/generated/abi/DATFactoryImplementation.ts", "../src/generated/abi/DATPausableImplementation.ts", "../src/generated/abi/DATVotesImplementation.ts", "../src/generated/abi/index.ts", "../src/generated/addresses.ts", "../src/core/client.ts", "../src/config/chains.ts", "../src/config/default-services.ts", "../src/chains/definitions.ts", "../src/types/storage.ts", "../src/auth/web3-signed-builder.ts", "../src/utils/encoding.ts", "../src/protocol/networks.ts", "../src/utils/response-body.ts", "../src/storage/providers/vana-storage.ts", "../src/storage/default.ts", "../src/storage/providers/r2.ts", "../src/storage/providers/google-drive.ts", "../src/storage/providers/dropbox.ts", "../src/storage/providers/ipfs.ts", "../src/storage/providers/pinata.ts", "../src/storage/providers/callback-storage.ts", "../src/storage/manager.ts", "../src/platform/node.ts", "../src/platform/shared/stream-utils.ts", "../src/crypto/ecies/node.ts", "../src/crypto/ecies/index.ts", "../src/platform/utils.ts", "../src/platform/browser-safe.ts", "../src/crypto/keys/derive.ts", "../src/crypto/envelope/openpgp.ts", "../src/auth/web3-signed.ts", "../src/auth/pkce.ts", "../src/auth/token-store.ts", "../src/auth/oauth-client.ts", "../src/protocol/eip712.ts", "../src/protocol/identity.ts", "../src/protocol/jobs.ts", "../src/protocol/jobs-client.ts", "../src/crypto/envelope/job.ts", "../src/config/contracts.config.ts", "../src/protocol/escrow.ts", "../src/protocol/write-signer.ts", "../src/protocol/personal-server-registration.ts", "../src/personal-server-lite/owner-binding.ts", "../src/account/personal-server-registration.ts", "../src/account/personal-server-lite-owner-binding.ts", "../src/protocol/grants.ts", "../src/protocol/fee-registry.ts", "../src/protocol/escrow-deposit.ts", "../src/protocol/data-point-status.ts", "../src/protocol/data-point-deletion.ts", "../src/protocol/lineage.ts", "../src/protocol/personal-server-error-body.ts", "../src/protocol/personal-server-data.ts", "../src/protocol/data-file.ts", "../src/protocol/scopes.ts", "../src/protocol/scope-actions.ts", "../src/protocol/personal-server-write.ts", "../src/protocol/write-request.ts", "../src/protocol/derivative-questions.ts", "../src/protocol/derivative-status.ts", "../src/protocol/gateway.ts", "../src/direct/escrow-payment.ts", "../src/direct/personal-server-read.ts", "../src/types/ps-errors.ts"],
  "sourcesContent": ["/**\n * Shared PGP utilities for platform adapters\n *\n * IMPORTANT: This module contains NO IMPORTS to avoid affecting bundle loading.\n * All functions are pure utilities that can be safely shared across platforms.\n */\n\n/**\n * Standard OpenPGP configuration for consistent behavior across platforms\n * Uses enum values instead of importing openpgp to avoid loading issues\n */\nexport const STANDARD_PGP_CONFIG = {\n  preferredCompressionAlgorithm: 2, // zlib (openpgp.enums.compression.zlib)\n  preferredSymmetricAlgorithm: 7, // aes256 (openpgp.enums.symmetric.aes256)\n} as const;\n\n/**\n * Process PGP key generation options with sensible defaults\n *\n * @param options - Optional key generation parameters\n * @param options.name - The name for the PGP key (defaults to \"Vana User\")\n * @param options.email - The email for the PGP key (defaults to \"user@vana.org\")\n * @param options.passphrase - Optional passphrase to protect the private key\n * @returns Processed options with defaults applied\n */\nexport function processPGPKeyOptions(options?: {\n  name?: string;\n  email?: string;\n  passphrase?: string;\n}) {\n  return {\n    name: options?.name ?? \"Vana User\",\n    email: options?.email ?? \"user@vana.org\",\n    passphrase: options?.passphrase,\n  };\n}\n\n/**\n * Get standard PGP key generation parameters\n * Combines default values with standard configuration\n *\n * @param options - Optional key generation parameters\n * @param options.name - The name for the PGP key (defaults to \"Vana User\")\n * @param options.email - The email for the PGP key (defaults to \"user@vana.org\")\n * @param options.passphrase - Optional passphrase to protect the private key\n * @returns Complete key generation parameters object\n */\nexport function getPGPKeyGenParams(options?: {\n  name?: string;\n  email?: string;\n  passphrase?: string;\n}) {\n  const { name, email, passphrase } = processPGPKeyOptions(options);\n\n  return {\n    type: \"rsa\" as const,\n    rsaBits: 2048,\n    userIDs: [{ name, email }],\n    passphrase,\n    config: STANDARD_PGP_CONFIG,\n  };\n}\n", "/**\n * Shared error utilities for platform adapters\n *\n * IMPORTANT: This module contains NO IMPORTS to avoid affecting bundle loading.\n * All functions are pure utilities that can be safely shared across platforms.\n */\n\n/**\n * Wrap platform-specific errors with consistent messaging\n * Provides consistent error formatting across all crypto operations\n *\n * @param operation The operation that failed (e.g., \"encryption\", \"decryption\")\n * @param error The original error that occurred\n * @returns Wrapped error with consistent format\n */\nexport function wrapCryptoError(operation: string, error: unknown): Error {\n  const message = error instanceof Error ? error.message : \"Unknown error\";\n  return new Error(`${operation} failed: ${message}`);\n}\n\n/**\n * Validate encrypted data structure has required fields\n * Ensures encrypted data objects contain the expected properties\n *\n * @param data The data structure to validate\n * @throws Error if data structure is invalid\n */\nexport function validateEncryptedDataStructure(data: unknown): void {\n  if (!data || typeof data !== \"object\") {\n    throw new Error(\"Invalid encrypted data format\");\n  }\n\n  const obj = data as Record<string, unknown>;\n  if (!obj.encrypted || !obj.iv || !obj.ephemeralPublicKey) {\n    throw new Error(\"Invalid encrypted data format\");\n  }\n}\n", "/**\n * Provides lazy module loading to avoid Temporal Dead Zone issues.\n *\n * @remarks\n * This module implements a caching lazy import pattern to work around Turbopack's\n * strict module initialization. Dependencies that access globals during initialization\n * must be dynamically imported to prevent TDZ errors in Next.js environments.\n *\n * @see {@link https://github.com/vercel/next.js/issues/82632 | Turbopack TDZ Issue}\n *\n * @category Utilities\n * @module utils/lazy-import\n */\n\n/**\n * Creates a cached lazy import function for deferred module loading.\n *\n * @remarks\n * Caches the import promise (not the module) to prevent race conditions\n * during concurrent first calls. On import failure, clears the cache to\n * allow retry on next attempt.\n *\n * @typeParam T - The type of the module being imported\n *\n * @param importFn - Function that returns a dynamic import promise.\n *   Should be a dynamic import expression like `() => import('module')`.\n * @returns A function that returns the cached import promise\n *\n * @example\n * ```typescript\n * // Create lazy loader for heavy crypto library\n * const getOpenPGP = lazyImport(() => import('openpgp'));\n *\n * // Use when needed (first call triggers import)\n * const openpgp = await getOpenPGP();\n * const encrypted = await openpgp.encrypt(data);\n *\n * // Subsequent calls return cached promise\n * const openpgp2 = await getOpenPGP(); // Same instance\n * ```\n *\n * @category Utilities\n */\nexport function lazyImport<T>(importFn: () => Promise<T>): () => Promise<T> {\n  let cached: Promise<T> | null = null;\n\n  return () => {\n    cached ??= importFn().catch((err) => {\n      // Clear cache on error so next attempt can retry\n      cached = null;\n      throw new Error(\"Failed to load module\", { cause: err });\n    });\n    return cached;\n  };\n}\n", "/**\n * Provides platform-agnostic cryptographic utility functions.\n *\n * @remarks\n * This module contains utility functions for cryptographic operations that work\n * consistently across Node.js and browser environments. All functions use `Uint8Array`\n * exclusively for binary data to ensure cross-platform compatibility.\n *\n * @category Cryptography\n */\n\nimport { fromHex } from \"viem\";\n\n/**\n * Processes a wallet public key for cryptographic operations.\n *\n * @remarks\n * Converts hex string public keys to Uint8Array format.\n * For normalization to uncompressed format, use the crypto provider's\n * normalizeToUncompressed method.\n *\n * @param publicKey - The wallet public key as hex string or byte array.\n * @returns The public key as a Uint8Array.\n *\n * @example\n * ```typescript\n * const keyBytes = processWalletPublicKey(\"0x04...\");\n * const normalized = provider.normalizeToUncompressed(keyBytes);\n * ```\n */\nexport function processWalletPublicKey(\n  publicKey: string | Uint8Array,\n): Uint8Array {\n  // Convert to bytes if hex string\n  return typeof publicKey === \"string\"\n    ? fromHex(\n        (publicKey.startsWith(\"0x\")\n          ? publicKey\n          : `0x${publicKey}`) as `0x${string}`,\n        \"bytes\",\n      )\n    : publicKey;\n}\n\n/**\n * Processes a wallet private key for cryptographic operations.\n *\n * @param privateKey - The wallet private key as hex string or byte array.\n * @returns The private key as a Uint8Array.\n *\n * @example\n * ```typescript\n * const key = processWalletPrivateKey(\"0x...\");\n * console.log(key.length); // 32 (secp256k1 private key)\n * ```\n */\nexport function processWalletPrivateKey(\n  privateKey: string | Uint8Array,\n): Uint8Array {\n  // Convert to bytes\n  return typeof privateKey === \"string\"\n    ? fromHex(\n        (privateKey.startsWith(\"0x\")\n          ? privateKey\n          : `0x${privateKey}`) as `0x${string}`,\n        \"bytes\",\n      )\n    : privateKey;\n}\n\n/**\n * Parses legacy eccrypto-format encrypted data buffer.\n * Format: [iv(16)][ephemPublicKey(65)][ciphertext(variable)][mac(32)]\n *\n * @param encryptedBuffer - Buffer containing encrypted data in eccrypto format\n * @returns Parsed encrypted data components\n */\nexport function parseEncryptedDataBuffer(encryptedBuffer: Uint8Array): {\n  iv: Uint8Array;\n  ephemPublicKey: Uint8Array;\n  ciphertext: Uint8Array;\n  mac: Uint8Array;\n} {\n  return {\n    iv: encryptedBuffer.slice(0, 16),\n    ephemPublicKey: encryptedBuffer.slice(16, 81), // 65 bytes for uncompressed public key\n    ciphertext: encryptedBuffer.slice(81, -32),\n    mac: encryptedBuffer.slice(-32),\n  };\n}\n\n/**\n * Generates a deterministic seed from a message for key derivation\n *\n * @param message - Message to derive seed from\n * @returns Seed as Uint8Array\n */\nexport function generateSeed(message: string): Uint8Array {\n  // Use encoding utils for consistent string-to-bytes conversion\n  const encoder = new TextEncoder();\n  return encoder.encode(message);\n}\n\n/**\n * Compares two Uint8Arrays for equality\n *\n * @param a - First array\n * @param b - Second array\n * @returns True if arrays are equal\n */\nexport function bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n  if (a.length !== b.length) return false;\n  for (let i = 0; i < a.length; i++) {\n    if (a[i] !== b[i]) return false;\n  }\n  return true;\n}\n\n/**\n * Creates a copy of a Uint8Array\n *\n * @param bytes - Array to copy\n * @returns New array with same contents\n */\nexport function copyBytes(bytes: Uint8Array): Uint8Array {\n  return new Uint8Array(bytes);\n}\n\n/**\n * Validates a secp256k1 public key format\n *\n * @param publicKey - Public key to validate\n * @returns True if valid format (33, 65, or 64 bytes)\n */\nexport function isValidPublicKeyFormat(publicKey: Uint8Array): boolean {\n  const len = publicKey.length;\n\n  // Compressed (33 bytes)\n  if (len === 33) {\n    return publicKey[0] === 0x02 || publicKey[0] === 0x03;\n  }\n\n  // Uncompressed (65 bytes)\n  if (len === 65) {\n    return publicKey[0] === 0x04;\n  }\n\n  // Raw coordinates (64 bytes - no prefix)\n  if (len === 64) {\n    return true;\n  }\n\n  return false;\n}\n\n/**\n * Validates a secp256k1 private key format\n *\n * @param privateKey - Private key to validate\n * @returns True if valid format (32 bytes)\n */\nexport function isValidPrivateKeyFormat(privateKey: Uint8Array): boolean {\n  return privateKey.length === 32;\n}\n\n/**\n * Asserts that a public key is in uncompressed format (65 bytes with 0x04 prefix).\n * This validation function only checks format, it does not transform keys.\n * For key normalization (including decompression), use the crypto provider's\n * normalizeToUncompressed method.\n *\n * @param publicKey - Public key to validate\n * @throws {Error} When public key is not in uncompressed format\n */\nexport function assertUncompressedPublicKey(publicKey: Uint8Array): void {\n  if (publicKey.length !== 65) {\n    throw new Error(\n      `Public key must be uncompressed (65 bytes), got ${publicKey.length} bytes. ` +\n        `Use provider.normalizeToUncompressed() to convert compressed keys.`,\n    );\n  }\n\n  if (publicKey[0] !== 0x04) {\n    throw new Error(\n      `Uncompressed public key must start with 0x04 prefix, got 0x${publicKey[0].toString(16).padStart(2, \"0\")}`,\n    );\n  }\n}\n", "/**\n * Service for wallet key encryption and decryption operations.\n *\n * @remarks\n * This service separates business logic (wallet key processing) from crypto primitives\n * (ECIES operations). It handles key normalization, data conversion, and format transformation\n * while delegating actual cryptographic operations to the provided ECIES provider.\n *\n * @category Cryptography\n * @internal\n */\n\nimport type { ECIESProvider, ECIESEncrypted } from \"../ecies/interface\";\nimport {\n  processWalletPublicKey,\n  processWalletPrivateKey,\n  parseEncryptedDataBuffer,\n} from \"../../utils/crypto-utils\";\nimport { stringToBytes, bytesToString, toHex, fromHex, concat } from \"viem\";\n\nexport interface WalletKeyEncryptionServiceConfig {\n  /** ECIES provider for encryption/decryption */\n  eciesProvider: ECIESProvider;\n}\n\n/**\n * Service for wallet key encryption and decryption operations\n *\n * @remarks\n * This service encapsulates the business logic for wallet key operations,\n * delegating actual cryptographic operations to the provided ECIES provider.\n * It handles key normalization, data conversion, and format transformation.\n *\n * @internal\n */\nexport class WalletKeyEncryptionService {\n  private readonly eciesProvider: ECIESProvider;\n\n  constructor(config: WalletKeyEncryptionServiceConfig) {\n    this.eciesProvider = config.eciesProvider;\n  }\n\n  /**\n   * Encrypts data using a wallet's public key.\n   *\n   * @param data - The plaintext message to encrypt for the wallet owner.\n   * @param publicKey - The recipient wallet's public key for encryption.\n   * @returns A promise that resolves to the encrypted data as a hex string.\n   * @throws {Error} When encryption fails due to invalid key format.\n   *\n   * @example\n   * ```typescript\n   * const encrypted = await processor.encryptWithWalletPublicKey(\n   *   \"Secret message\",\n   *   \"0x04...\" // 65-byte uncompressed public key\n   * );\n   * console.log(`Encrypted: ${encrypted}`);\n   * ```\n   */\n  async encryptWithWalletPublicKey(\n    data: string,\n    publicKey: string | Uint8Array,\n  ): Promise<string> {\n    // Process the public key to ensure correct format\n    const publicKeyBytes = processWalletPublicKey(publicKey);\n\n    // Normalize to uncompressed format using the provider\n    // This handles compressed keys, raw coordinates, and validates the format\n    const normalizedKey =\n      this.eciesProvider.normalizeToUncompressed(publicKeyBytes);\n\n    // Convert string data to bytes\n    const dataBytes = stringToBytes(data);\n\n    // Perform ECIES encryption\n    const encrypted = await this.eciesProvider.encrypt(\n      normalizedKey,\n      dataBytes,\n    );\n\n    // Concatenate all components for legacy format compatibility\n    const result = concat([\n      encrypted.iv,\n      encrypted.ephemPublicKey,\n      encrypted.ciphertext,\n      encrypted.mac,\n    ]);\n\n    // Return as hex string without 0x prefix for API compatibility\n    return toHex(result).slice(2);\n  }\n\n  /**\n   * Decrypts data using a wallet's private key.\n   *\n   * @param encryptedData - The hex-encoded encrypted data to decrypt.\n   * @param privateKey - The wallet's private key for decryption.\n   * @returns A promise that resolves to the decrypted plaintext message.\n   * @throws {Error} When decryption fails due to invalid data or key format.\n   *\n   * @example\n   * ```typescript\n   * const decrypted = await processor.decryptWithWalletPrivateKey(\n   *   encryptedHexString,\n   *   \"0x...\" // 32-byte private key\n   * );\n   * console.log(`Decrypted: ${decrypted}`);\n   * ```\n   */\n  async decryptWithWalletPrivateKey(\n    encryptedData: string,\n    privateKey: string | Uint8Array,\n  ): Promise<string> {\n    // Process the private key to ensure correct format\n    const privateKeyBytes = processWalletPrivateKey(privateKey);\n\n    // Convert hex string to bytes and parse encrypted components\n    const prefixedHex = encryptedData.startsWith(\"0x\")\n      ? encryptedData\n      : `0x${encryptedData}`;\n    const encryptedBytes = fromHex(prefixedHex as `0x${string}`, \"bytes\");\n    const encrypted = parseEncryptedDataBuffer(encryptedBytes);\n\n    // Perform ECIES decryption\n    const decrypted = await this.eciesProvider.decrypt(\n      privateKeyBytes,\n      encrypted,\n    );\n\n    // Convert bytes back to string\n    return bytesToString(decrypted);\n  }\n\n  /**\n   * Encrypts a Uint8Array with a wallet public key\n   *\n   * @param data - Binary data to encrypt\n   * @param publicKey - Public key as hex string or Uint8Array\n   * @returns Encrypted data structure\n   */\n  async encryptBinary(\n    data: Uint8Array,\n    publicKey: string | Uint8Array,\n  ): Promise<ECIESEncrypted> {\n    const publicKeyBytes = processWalletPublicKey(publicKey);\n    const normalizedKey =\n      this.eciesProvider.normalizeToUncompressed(publicKeyBytes);\n    return this.eciesProvider.encrypt(normalizedKey, data);\n  }\n\n  /**\n   * Decrypts to a Uint8Array with a wallet private key\n   *\n   * @param encrypted - Encrypted data structure\n   * @param privateKey - Private key as hex string or Uint8Array\n   * @returns Decrypted binary data\n   */\n  async decryptBinary(\n    encrypted: ECIESEncrypted,\n    privateKey: string | Uint8Array,\n  ): Promise<Uint8Array> {\n    const privateKeyBytes = processWalletPrivateKey(privateKey);\n    return this.eciesProvider.decrypt(privateKeyBytes, encrypted);\n  }\n\n  /**\n   * Gets the underlying ECIES provider\n   *\n   * @returns The ECIES provider instance\n   */\n  getECIESProvider(): ECIESProvider {\n    return this.eciesProvider;\n  }\n}\n", "/**\n * ECIES Constants and Format Specification\n *\n * These constants define the eccrypto-compatible ECIES format used throughout the SDK.\n * Maintaining these exact values ensures backward compatibility with data encrypted\n * using the original eccrypto library.\n */\n\n/**\n * Elliptic curve parameters\n */\nexport const CURVE = {\n  /** The elliptic curve used (secp256k1 - same as Bitcoin/Ethereum) */\n  name: \"secp256k1\",\n  /** Private key length in bytes */\n  PRIVATE_KEY_LENGTH: 32,\n  /** Compressed public key length in bytes (0x02 or 0x03 prefix + 32 bytes) */\n  COMPRESSED_PUBLIC_KEY_LENGTH: 33,\n  /** Uncompressed public key length in bytes (0x04 prefix + 64 bytes) */\n  UNCOMPRESSED_PUBLIC_KEY_LENGTH: 65,\n  /** ECDH shared secret X coordinate length */\n  SHARED_SECRET_LENGTH: 32,\n  /** Public key prefixes */\n  PREFIX: {\n    /** Uncompressed public key prefix */\n    UNCOMPRESSED: 0x04,\n    /** Compressed public key prefix for even Y */\n    COMPRESSED_EVEN: 0x02,\n    /** Compressed public key prefix for odd Y */\n    COMPRESSED_ODD: 0x03,\n  },\n  /** X coordinate starts at byte 1 (after prefix) */\n  X_COORDINATE_OFFSET: 1,\n  /** X coordinate ends at byte 33 (1 + 32) */\n  X_COORDINATE_END: 33,\n} as const;\n\n/**\n * Symmetric encryption parameters (AES-256-CBC)\n */\nexport const CIPHER = {\n  /** Cipher algorithm - must match eccrypto */\n  algorithm: \"aes-256-cbc\",\n  /** AES key length in bytes */\n  KEY_LENGTH: 32,\n  /** Initialization vector length in bytes */\n  IV_LENGTH: 16,\n  /** Block size for AES */\n  BLOCK_SIZE: 16,\n} as const;\n\n/**\n * Key derivation function parameters\n */\nexport const KDF = {\n  /** Hash algorithm for key derivation - must match eccrypto */\n  algorithm: \"sha512\",\n  /** Output length of SHA-512 in bytes */\n  OUTPUT_LENGTH: 64,\n  /** Encryption key slice (first 32 bytes of KDF output) */\n  ENCRYPTION_KEY_OFFSET: 0,\n  ENCRYPTION_KEY_LENGTH: 32,\n  /** MAC key slice (last 32 bytes of KDF output) */\n  MAC_KEY_OFFSET: 32,\n  MAC_KEY_LENGTH: 32,\n} as const;\n\n/**\n * Message authentication code parameters\n */\nexport const MAC = {\n  /** MAC algorithm - must match eccrypto */\n  algorithm: \"sha256\",\n  /** HMAC-SHA256 output length in bytes */\n  LENGTH: 32,\n} as const;\n\n/**\n * ECIES encrypted data format offsets and lengths\n * Format: [iv(16)][ephemPublicKey(65)][ciphertext(variable)][mac(32)]\n */\nexport const FORMAT = {\n  /** Offsets for each component in serialized format */\n  IV_OFFSET: 0,\n  IV_LENGTH: CIPHER.IV_LENGTH,\n\n  /** Ephemeral public key (always uncompressed in eccrypto format) */\n  EPHEMERAL_KEY_OFFSET: CIPHER.IV_LENGTH,\n  EPHEMERAL_KEY_LENGTH: CURVE.UNCOMPRESSED_PUBLIC_KEY_LENGTH,\n\n  /** Ciphertext starts after IV and ephemeral key */\n  CIPHERTEXT_OFFSET: CIPHER.IV_LENGTH + CURVE.UNCOMPRESSED_PUBLIC_KEY_LENGTH,\n\n  /** MAC is always the last 32 bytes */\n  MAC_LENGTH: MAC.LENGTH,\n\n  /** Minimum size of encrypted data (IV + ephemKey + MAC, no ciphertext) */\n  MIN_ENCRYPTED_LENGTH:\n    CIPHER.IV_LENGTH + CURVE.UNCOMPRESSED_PUBLIC_KEY_LENGTH + MAC.LENGTH,\n\n  /**\n   * Helper to calculate total length of encrypted data\n   *\n   * @param ciphertextLength - Length of the ciphertext portion\n   * @returns Total length including all components\n   */\n  getTotalLength: (ciphertextLength: number) =>\n    CIPHER.IV_LENGTH +\n    CURVE.UNCOMPRESSED_PUBLIC_KEY_LENGTH +\n    ciphertextLength +\n    MAC.LENGTH,\n} as const;\n\n/**\n * Security constants for data clearing\n */\nexport const SECURITY = {\n  /** Overwrite patterns for secure data clearing */\n  CLEAR_PATTERNS: {\n    ZEROS: 0x00,\n    ONES: 0xff,\n    /** Pattern multiplier for third pass */\n    PATTERN_MULTIPLIER: 7,\n    /** Pattern offset for third pass */\n    PATTERN_OFFSET: 13,\n  },\n} as const;\n", "/**\n * ECIES (Elliptic Curve Integrated Encryption Scheme) Interface\n *\n * @remarks\n * Defines the contract for platform-specific ECIES implementations.\n * All implementations maintain compatibility with the eccrypto format to ensure\n * backward compatibility with existing encrypted data.\n *\n * **Format specification:**\n * `[iv (16 bytes)][ephemPublicKey (65 bytes)][ciphertext (variable)][mac (32 bytes)]`\n *\n * @category Cryptography\n */\n\nimport { CIPHER, CURVE, MAC, FORMAT } from \"./constants\";\nimport { fromHex, toHex } from \"viem\";\n\n/**\n * Represents ECIES encrypted data in eccrypto-compatible format.\n *\n * @remarks\n * This structure maintains backward compatibility with data encrypted using\n * the legacy eccrypto library.\n */\nexport interface ECIESEncrypted {\n  /** Initialization vector (16 bytes) */\n  iv: Uint8Array;\n  /** Ephemeral public key (65 bytes uncompressed) */\n  ephemPublicKey: Uint8Array;\n  /** Encrypted data */\n  ciphertext: Uint8Array;\n  /** Message authentication code (32 bytes) */\n  mac: Uint8Array;\n}\n\n/**\n * Provides ECIES encryption and decryption operations.\n *\n * @remarks\n * Platform-specific implementations handle the underlying cryptographic primitives\n * while maintaining consistent data format across environments.\n *\n * @category Cryptography\n */\nexport interface ECIESProvider {\n  /**\n   * Encrypts data using ECIES with secp256k1.\n   *\n   * @param publicKey - Recipient's public key (65 bytes uncompressed or 33 bytes compressed).\n   *   Obtain via `vana.server.getIdentity(userAddress).public_key`.\n   * @param message - Data to encrypt.\n   * @returns Encrypted data structure compatible with eccrypto format.\n   * @throws {ECIESError} When public key is invalid.\n   *   Verify key format matches secp256k1 requirements.\n   *\n   * @example\n   * ```typescript\n   * const encrypted = await provider.encrypt(\n   *   fromHex(publicKey, 'bytes'),\n   *   new TextEncoder().encode('sensitive data')\n   * );\n   * ```\n   */\n  encrypt(publicKey: Uint8Array, message: Uint8Array): Promise<ECIESEncrypted>;\n\n  /**\n   * Decrypts ECIES encrypted data.\n   *\n   * @param privateKey - Recipient's private key (32 bytes).\n   * @param encrypted - Encrypted data structure from `encrypt()` or legacy eccrypto.\n   * @returns Decrypted message as Uint8Array.\n   * @throws {ECIESError} When MAC verification fails.\n   *   Ensure the private key matches the public key used for encryption.\n   *\n   * @example\n   * ```typescript\n   * const decrypted = await provider.decrypt(\n   *   fromHex(privateKey, 'bytes'),\n   *   encrypted\n   * );\n   * const message = new TextDecoder().decode(decrypted);\n   * ```\n   */\n  decrypt(\n    privateKey: Uint8Array,\n    encrypted: ECIESEncrypted,\n  ): Promise<Uint8Array>;\n\n  /**\n   * Normalizes a public key to uncompressed format (65 bytes with 0x04 prefix).\n   *\n   * @remarks\n   * Strict policy: Only accepts properly formatted compressed (33 bytes) or\n   * uncompressed (65 bytes) public keys. Does not accept 64-byte raw coordinates\n   * to ensure data integrity and prevent masking of malformed inputs.\n   *\n   * @param publicKey - Public key in compressed or uncompressed format\n   * @returns Normalized uncompressed public key (65 bytes with 0x04 prefix)\n   * @throws {Error} When public key format is invalid, including raw coordinates (64 bytes)\n   * @throws {Error} When decompression of compressed key fails\n   *\n   * @example\n   * ```typescript\n   * // Compressed key (33 bytes)\n   * const compressed = new Uint8Array(33);\n   * compressed[0] = 0x02;\n   * const uncompressed = provider.normalizeToUncompressed(compressed);\n   * console.log(uncompressed.length); // 65\n   * console.log(uncompressed[0]); // 0x04\n   *\n   * // Already uncompressed (65 bytes)\n   * const already = provider.normalizeToUncompressed(uncompressedKey);\n   * console.log(already === uncompressedKey); // true (returns same reference)\n   *\n   * // Raw coordinates rejected (64 bytes)\n   * const raw = new Uint8Array(64);\n   * provider.normalizeToUncompressed(raw); // Throws error\n   * ```\n   */\n  normalizeToUncompressed(publicKey: Uint8Array): Uint8Array;\n}\n\n/**\n * Configures ECIES operation behavior.\n */\nexport interface ECIESOptions {\n  /** Use compressed public keys (33 bytes) instead of uncompressed (65 bytes) */\n  useCompressed?: boolean;\n}\n\n/**\n * Represents failures in ECIES cryptographic operations.\n *\n * @remarks\n * Provides specific error codes to help identify and recover from\n * different failure scenarios.\n *\n * @category Errors\n */\nexport class ECIESError extends Error {\n  constructor(\n    message: string,\n    public readonly code:\n      | \"INVALID_KEY\"\n      | \"ENCRYPTION_FAILED\"\n      | \"DECRYPTION_FAILED\"\n      | \"MAC_MISMATCH\"\n      | \"ECDH_FAILED\",\n    public override readonly cause?: Error,\n  ) {\n    super(message);\n    this.name = \"ECIESError\";\n  }\n}\n\n/**\n * Validates if an object conforms to the ECIESEncrypted structure.\n *\n * @param obj - Object to validate.\n * @returns `true` if object is a valid ECIESEncrypted structure.\n *\n * @example\n * ```typescript\n * if (isECIESEncrypted(data)) {\n *   const decrypted = await provider.decrypt(privateKey, data);\n * }\n * ```\n */\nexport function isECIESEncrypted(obj: unknown): obj is ECIESEncrypted {\n  if (!obj || typeof obj !== \"object\") return false;\n  const enc = obj as Record<string, unknown>;\n\n  const isUint8Array = (value: unknown): value is Uint8Array => {\n    return (\n      value instanceof Uint8Array ||\n      (typeof Buffer !== \"undefined\" && Buffer.isBuffer(value))\n    );\n  };\n\n  return (\n    isUint8Array(enc.iv) &&\n    enc.iv.length === CIPHER.IV_LENGTH &&\n    isUint8Array(enc.ephemPublicKey) &&\n    (enc.ephemPublicKey.length === CURVE.UNCOMPRESSED_PUBLIC_KEY_LENGTH ||\n      enc.ephemPublicKey.length === CURVE.COMPRESSED_PUBLIC_KEY_LENGTH) &&\n    isUint8Array(enc.ciphertext) &&\n    enc.ciphertext.length > 0 &&\n    isUint8Array(enc.mac) &&\n    enc.mac.length === MAC.LENGTH\n  );\n}\n\n/**\n * Serializes ECIESEncrypted to hex string for storage or transmission.\n *\n * @param encrypted - Encrypted data structure from `encrypt()`.\n * @returns Hex string representation.\n *\n * @example\n * ```typescript\n * const hexString = serializeECIES(encrypted);\n * // Store hexString in database or send over network\n * ```\n */\nexport function serializeECIES(encrypted: ECIESEncrypted): string {\n  const combined = new Uint8Array(\n    encrypted.iv.length +\n      encrypted.ephemPublicKey.length +\n      encrypted.ciphertext.length +\n      encrypted.mac.length,\n  );\n\n  let offset = 0;\n  combined.set(encrypted.iv, offset);\n  offset += encrypted.iv.length;\n  combined.set(encrypted.ephemPublicKey, offset);\n  offset += encrypted.ephemPublicKey.length;\n  combined.set(encrypted.ciphertext, offset);\n  offset += encrypted.ciphertext.length;\n  combined.set(encrypted.mac, offset);\n\n  return toHex(combined).slice(2);\n}\n\n/**\n * Deserializes hex string to ECIESEncrypted structure.\n *\n * @param hex - Hex string from `serializeECIES()` or storage.\n * @returns ECIESEncrypted structure ready for decryption.\n * @throws {ECIESError} When hex string format is invalid.\n *   Verify the hex string is complete and uncorrupted.\n *\n * @example\n * ```typescript\n * const encrypted = deserializeECIES(hexString);\n * const decrypted = await provider.decrypt(privateKey, encrypted);\n * ```\n */\nexport function deserializeECIES(hex: string): ECIESEncrypted {\n  const hexWithPrefix = hex.startsWith(\"0x\") ? hex : `0x${hex}`;\n  const bytes = fromHex(hexWithPrefix as `0x${string}`, \"bytes\");\n\n  // Check minimum length before accessing prefix byte\n  // Need at least: IV (16 bytes) + 1 byte for prefix check + MAC (32 bytes) + 1 byte ciphertext\n  const absoluteMinLength = FORMAT.IV_LENGTH + 1 + MAC.LENGTH + 1;\n  if (bytes.length < absoluteMinLength) {\n    throw new ECIESError(\n      `Invalid ECIES data: too short (${bytes.length} bytes, minimum ${absoluteMinLength} bytes required)`,\n      \"DECRYPTION_FAILED\",\n    );\n  }\n\n  // Validate ephemeral public key prefix (must be uncompressed for eccrypto compatibility)\n  const prefix = bytes[FORMAT.EPHEMERAL_KEY_OFFSET];\n\n  if (prefix !== CURVE.PREFIX.UNCOMPRESSED) {\n    throw new ECIESError(\n      `Invalid ephemeral public key: must be uncompressed format (0x04 prefix), got 0x${prefix.toString(16).padStart(2, \"0\")}`,\n      \"DECRYPTION_FAILED\",\n    );\n  }\n\n  const ephemKeySize = CURVE.UNCOMPRESSED_PUBLIC_KEY_LENGTH;\n\n  const minLength = FORMAT.IV_LENGTH + ephemKeySize + MAC.LENGTH + 1; // +1 for at least 1 byte of ciphertext\n  if (bytes.length < minLength) {\n    throw new ECIESError(\n      `Invalid ECIES data: too short (${bytes.length} bytes, minimum ${minLength} bytes required)`,\n      \"DECRYPTION_FAILED\",\n    );\n  }\n\n  return {\n    iv: bytes.subarray(FORMAT.IV_OFFSET, FORMAT.IV_OFFSET + FORMAT.IV_LENGTH),\n    ephemPublicKey: bytes.subarray(\n      FORMAT.EPHEMERAL_KEY_OFFSET,\n      FORMAT.EPHEMERAL_KEY_OFFSET + ephemKeySize,\n    ),\n    ciphertext: bytes.subarray(\n      FORMAT.EPHEMERAL_KEY_OFFSET + ephemKeySize,\n      bytes.length - MAC.LENGTH,\n    ),\n    mac: bytes.subarray(bytes.length - MAC.LENGTH),\n  };\n}\n", "/**\n * Utility functions for ECIES operations\n *\n * Provides conversion utilities between different data formats\n * to bridge platform-specific implementations.\n */\n\n/**\n * Checks if two Uint8Arrays are equal in constant time\n *\n * @param a - First array to compare\n * @param b - Second array to compare\n * @returns `true` if arrays are equal\n */\nexport function constantTimeEqual(a: Uint8Array, b: Uint8Array): boolean {\n  if (a.length !== b.length) return false;\n  let result = 0;\n  for (let i = 0; i < a.length; i++) {\n    result |= a[i] ^ b[i];\n  }\n  return result === 0;\n}\n\n/**\n * Converts Buffer to Uint8Array (for Node.js compatibility layer)\n * In browser, this is a no-op if already Uint8Array\n *\n * @param buffer - Buffer or Uint8Array to convert\n * @returns Uint8Array representation\n */\nexport function bufferToBytes(buffer: Buffer | Uint8Array): Uint8Array {\n  if (buffer instanceof Uint8Array) {\n    return buffer;\n  }\n  // Node.js Buffer is a subclass of Uint8Array\n  return new Uint8Array(buffer);\n}\n\n/**\n * Converts Uint8Array to Buffer (for Node.js compatibility layer)\n * Only available in Node.js environment\n *\n * @param bytes - Uint8Array to convert to Buffer\n * @returns Buffer representation\n */\nexport function bytesToBuffer(bytes: Uint8Array): Buffer {\n  if (typeof Buffer === \"undefined\") {\n    throw new Error(\"Buffer is not available in browser environment\");\n  }\n  return Buffer.from(bytes);\n}\n", "import type { ECIESProvider, ECIESEncrypted } from \"./interface\";\nimport { ECIESError, isECIESEncrypted } from \"./interface\";\nimport { CURVE, CIPHER, KDF } from \"./constants\";\nimport { constantTimeEqual } from \"./utils\";\nimport { concat } from \"viem\";\n\n/**\n * Provides shared ECIES encryption logic across platforms using Uint8Array.\n *\n * @remarks\n * Platform implementations extend this class and provide crypto primitives.\n * The base class handles the ECIES protocol flow while maintaining\n * compatibility with the eccrypto data format.\n *\n * **Implementation details:**\n * - KDF: SHA-512(shared_secret) \u2192 encKey (32B) || macKey (32B)\n * - Cipher: AES-256-CBC with random 16-byte IV\n * - MAC: HMAC-SHA256(macKey, iv || ephemPublicKey || ciphertext)\n *\n * @category Cryptography\n */\nexport abstract class BaseECIESUint8 implements ECIESProvider {\n  // Cache for validated public keys to avoid repeated validation\n  private static readonly validatedKeys = new WeakMap<Uint8Array, boolean>();\n\n  /**\n   * Generates cryptographically secure random bytes.\n   *\n   * @param length - Number of random bytes to generate.\n   * @returns Random bytes array.\n   */\n  protected abstract generateRandomBytes(length: number): Uint8Array;\n\n  /**\n   * Verifies a private key is valid for secp256k1.\n   *\n   * @param privateKey - Private key to verify (32 bytes).\n   * @returns `true` if valid private key.\n   */\n  protected abstract verifyPrivateKey(privateKey: Uint8Array): boolean;\n\n  /**\n   * Creates a public key from a private key.\n   *\n   * @param privateKey - Source private key (32 bytes).\n   * @param compressed - Generate compressed (33B) or uncompressed (65B) format.\n   * @returns Public key or `null` if creation failed.\n   */\n  protected abstract createPublicKey(\n    privateKey: Uint8Array,\n    compressed: boolean,\n  ): Uint8Array | null;\n\n  /**\n   * Validates a public key on the secp256k1 curve.\n   *\n   * @param publicKey - Public key to validate.\n   * @returns `true` if valid public key.\n   */\n  protected abstract validatePublicKey(publicKey: Uint8Array): boolean;\n\n  /**\n   * Decompresses a compressed public key.\n   *\n   * @param publicKey - Compressed public key (33 bytes).\n   * @returns Uncompressed public key (65 bytes) or `null` if decompression failed.\n   */\n  protected abstract decompressPublicKey(\n    publicKey: Uint8Array,\n  ): Uint8Array | null;\n\n  /**\n   * Performs ECDH key agreement.\n   *\n   * @param publicKey - Other party's public key.\n   * @param privateKey - Your private key.\n   * @returns Raw X coordinate of shared point (32 bytes).\n   */\n  protected abstract performECDH(\n    publicKey: Uint8Array,\n    privateKey: Uint8Array,\n  ): Uint8Array;\n\n  /**\n   * Computes SHA-512 hash.\n   *\n   * @param data - Data to hash.\n   * @returns SHA-512 hash (64 bytes).\n   */\n  protected abstract sha512(data: Uint8Array): Uint8Array;\n\n  /**\n   * Computes HMAC-SHA256 authentication tag.\n   *\n   * @param key - HMAC key.\n   * @param data - Data to authenticate.\n   * @returns HMAC-SHA256 (32 bytes).\n   */\n  protected abstract hmacSha256(key: Uint8Array, data: Uint8Array): Uint8Array;\n\n  /**\n   * Encrypts data using AES-256-CBC.\n   *\n   * @param key - Encryption key (32 bytes).\n   * @param iv - Initialization vector (16 bytes).\n   * @param plaintext - Data to encrypt.\n   * @returns Ciphertext with PKCS#7 padding.\n   */\n  protected abstract aesEncrypt(\n    key: Uint8Array,\n    iv: Uint8Array,\n    plaintext: Uint8Array,\n  ): Promise<Uint8Array>;\n\n  /**\n   * Decrypts data using AES-256-CBC.\n   *\n   * @param key - Decryption key (32 bytes).\n   * @param iv - Initialization vector (16 bytes).\n   * @param ciphertext - Data to decrypt.\n   * @returns Plaintext with padding removed.\n   */\n  protected abstract aesDecrypt(\n    key: Uint8Array,\n    iv: Uint8Array,\n    ciphertext: Uint8Array,\n  ): Promise<Uint8Array>;\n\n  /**\n   * Normalizes a public key to uncompressed format.\n   *\n   * @param publicKey - Public key in any format.\n   * @returns Uncompressed public key (65 bytes).\n   * @throws {ECIESError} If key format is invalid.\n   */\n  protected normalizePublicKey(publicKey: Uint8Array): Uint8Array {\n    // Check cache first\n    if (BaseECIESUint8.validatedKeys.get(publicKey)) {\n      return publicKey;\n    }\n\n    if (publicKey.length === CURVE.UNCOMPRESSED_PUBLIC_KEY_LENGTH) {\n      if (publicKey[0] !== CURVE.PREFIX.UNCOMPRESSED) {\n        throw new ECIESError(\n          \"Invalid uncompressed public key prefix\",\n          \"INVALID_KEY\",\n        );\n      }\n      // Validate and cache\n      if (!this.validatePublicKey(publicKey)) {\n        throw new ECIESError(\"Invalid public key\", \"INVALID_KEY\");\n      }\n      BaseECIESUint8.validatedKeys.set(publicKey, true);\n      return publicKey;\n    }\n\n    if (publicKey.length === CURVE.COMPRESSED_PUBLIC_KEY_LENGTH) {\n      if (\n        publicKey[0] === CURVE.PREFIX.COMPRESSED_EVEN ||\n        publicKey[0] === CURVE.PREFIX.COMPRESSED_ODD\n      ) {\n        const decompressed = this.decompressPublicKey(publicKey);\n        if (!decompressed) {\n          throw new ECIESError(\n            \"Failed to decompress public key\",\n            \"INVALID_KEY\",\n          );\n        }\n        // Cache the decompressed key\n        BaseECIESUint8.validatedKeys.set(decompressed, true);\n        return decompressed;\n      }\n      throw new ECIESError(\n        `Invalid compressed public key prefix: expected 0x02 or 0x03, got 0x${publicKey[0].toString(16).padStart(2, \"0\")}`,\n        \"INVALID_KEY\",\n      );\n    }\n\n    throw new ECIESError(\n      `Invalid public key length: ${publicKey.length}`,\n      \"INVALID_KEY\",\n    );\n  }\n\n  /**\n   * Normalizes a public key to uncompressed format (65 bytes with 0x04 prefix).\n   * Must be implemented by derived classes to handle platform-specific operations.\n   *\n   * @param publicKey - The public key to normalize\n   * @returns The normalized uncompressed public key\n   */\n  public abstract normalizeToUncompressed(publicKey: Uint8Array): Uint8Array;\n\n  /**\n   * Encrypts data using ECIES.\n   *\n   * @param publicKey - The recipient's public key (compressed or uncompressed)\n   * @param message - The data to encrypt\n   * @returns Promise resolving to encrypted data structure\n   */\n  async encrypt(\n    publicKey: Uint8Array,\n    message: Uint8Array,\n  ): Promise<ECIESEncrypted> {\n    // Declare sensitive variables outside try so finally can access them\n    let ephemeralPrivateKey: Uint8Array | undefined;\n    let sharedSecret: Uint8Array | undefined;\n    let kdf: Uint8Array | undefined;\n    let encryptionKey: Uint8Array | undefined;\n    let macKey: Uint8Array | undefined;\n\n    try {\n      // Validate inputs\n      if (!(publicKey instanceof Uint8Array)) {\n        throw new ECIESError(\"Public key must be a Uint8Array\", \"INVALID_KEY\");\n      }\n      if (!(message instanceof Uint8Array)) {\n        throw new ECIESError(\n          \"Message must be a Uint8Array\",\n          \"ENCRYPTION_FAILED\",\n        );\n      }\n      if (publicKey.length === 0) {\n        throw new ECIESError(\"Public key cannot be empty\", \"INVALID_KEY\");\n      }\n\n      // Normalize public key to uncompressed format\n      const pubKey = this.normalizePublicKey(publicKey);\n\n      // Generate ephemeral key pair\n      do {\n        ephemeralPrivateKey = this.generateRandomBytes(\n          CURVE.PRIVATE_KEY_LENGTH,\n        );\n      } while (!this.verifyPrivateKey(ephemeralPrivateKey));\n\n      const ephemeralPublicKey = this.createPublicKey(\n        ephemeralPrivateKey,\n        false,\n      );\n      if (!ephemeralPublicKey) {\n        throw new ECIESError(\n          \"Failed to generate ephemeral public key\",\n          \"ENCRYPTION_FAILED\",\n        );\n      }\n\n      // Perform ECDH to get shared secret (raw X coordinate)\n      sharedSecret = this.performECDH(pubKey, ephemeralPrivateKey);\n\n      // Derive keys using SHA-512 (eccrypto-compatible KDF)\n      kdf = this.sha512(sharedSecret);\n      encryptionKey = kdf.slice(\n        KDF.ENCRYPTION_KEY_OFFSET,\n        KDF.ENCRYPTION_KEY_OFFSET + KDF.ENCRYPTION_KEY_LENGTH,\n      );\n      macKey = kdf.slice(\n        KDF.MAC_KEY_OFFSET,\n        KDF.MAC_KEY_OFFSET + KDF.MAC_KEY_LENGTH,\n      );\n\n      // Generate random IV and encrypt\n      const iv = this.generateRandomBytes(CIPHER.IV_LENGTH);\n      const ciphertext = await this.aesEncrypt(encryptionKey, iv, message);\n\n      // Calculate MAC (Encrypt-then-MAC)\n      const macData = concat([iv, ephemeralPublicKey, ciphertext]);\n      const mac = this.hmacSha256(macKey, macData);\n\n      return {\n        iv,\n        ephemPublicKey: ephemeralPublicKey,\n        ciphertext,\n        mac,\n      };\n    } catch (error) {\n      if (error instanceof ECIESError) throw error;\n      throw new ECIESError(\n        `Encryption failed: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"ENCRYPTION_FAILED\",\n        error instanceof Error ? error : undefined,\n      );\n    } finally {\n      // Clear sensitive data on all code paths (success, error, throw)\n      if (ephemeralPrivateKey) this.clearBuffer(ephemeralPrivateKey);\n      if (sharedSecret) this.clearBuffer(sharedSecret);\n      if (kdf) this.clearBuffer(kdf);\n      if (encryptionKey) this.clearBuffer(encryptionKey);\n      if (macKey) this.clearBuffer(macKey);\n    }\n  }\n\n  /**\n   * Decrypts ECIES encrypted data.\n   *\n   * @param privateKey - The recipient's private key (32 bytes)\n   * @param encrypted - The encrypted data structure from encrypt()\n   * @returns Promise resolving to the original plaintext\n   */\n  async decrypt(\n    privateKey: Uint8Array,\n    encrypted: ECIESEncrypted,\n  ): Promise<Uint8Array> {\n    // Declare sensitive variables outside try so finally can access them\n    let sharedSecret: Uint8Array | undefined;\n    let kdf: Uint8Array | undefined;\n    let encryptionKey: Uint8Array | undefined;\n    let macKey: Uint8Array | undefined;\n\n    try {\n      // Validate inputs\n      if (!(privateKey instanceof Uint8Array)) {\n        throw new ECIESError(\"Private key must be a Uint8Array\", \"INVALID_KEY\");\n      }\n      if (!isECIESEncrypted(encrypted)) {\n        throw new ECIESError(\n          \"Invalid encrypted data structure\",\n          \"DECRYPTION_FAILED\",\n        );\n      }\n      if (privateKey.length !== CURVE.PRIVATE_KEY_LENGTH) {\n        throw new ECIESError(\n          `Invalid private key length: ${privateKey.length}`,\n          \"INVALID_KEY\",\n        );\n      }\n      if (!this.verifyPrivateKey(privateKey)) {\n        throw new ECIESError(\"Invalid private key\", \"INVALID_KEY\");\n      }\n\n      // Strict validation: ephemeral keys must be 65-byte uncompressed (eccrypto standard)\n      if (\n        encrypted.ephemPublicKey.length !== CURVE.UNCOMPRESSED_PUBLIC_KEY_LENGTH\n      ) {\n        throw new ECIESError(\n          `Invalid ephemeral public key: expected ${CURVE.UNCOMPRESSED_PUBLIC_KEY_LENGTH} bytes (uncompressed), got ${encrypted.ephemPublicKey.length} bytes`,\n          \"INVALID_KEY\",\n        );\n      }\n      if (encrypted.ephemPublicKey[0] !== CURVE.PREFIX.UNCOMPRESSED) {\n        throw new ECIESError(\n          \"Invalid ephemeral public key: must be uncompressed format with 0x04 prefix (eccrypto standard)\",\n          \"INVALID_KEY\",\n        );\n      }\n      if (!this.validatePublicKey(encrypted.ephemPublicKey)) {\n        throw new ECIESError(\"Invalid ephemeral public key\", \"INVALID_KEY\");\n      }\n      const ephemeralPublicKey = encrypted.ephemPublicKey;\n\n      // Perform ECDH to recover shared secret\n      sharedSecret = this.performECDH(ephemeralPublicKey, privateKey);\n\n      // Derive keys using SHA-512 (eccrypto-compatible KDF)\n      kdf = this.sha512(sharedSecret);\n      encryptionKey = kdf.slice(\n        KDF.ENCRYPTION_KEY_OFFSET,\n        KDF.ENCRYPTION_KEY_OFFSET + KDF.ENCRYPTION_KEY_LENGTH,\n      );\n      macKey = kdf.slice(\n        KDF.MAC_KEY_OFFSET,\n        KDF.MAC_KEY_OFFSET + KDF.MAC_KEY_LENGTH,\n      );\n\n      // Verify MAC before decryption (Encrypt-then-MAC)\n      const macData = concat([\n        encrypted.iv,\n        encrypted.ephemPublicKey,\n        encrypted.ciphertext,\n      ]);\n      const expectedMac = this.hmacSha256(macKey, macData);\n\n      if (!constantTimeEqual(encrypted.mac, expectedMac)) {\n        throw new ECIESError(\"MAC verification failed\", \"MAC_MISMATCH\");\n      }\n\n      // Decrypt the ciphertext\n      const decrypted = await this.aesDecrypt(\n        encryptionKey,\n        encrypted.iv,\n        encrypted.ciphertext,\n      );\n\n      return decrypted;\n    } catch (error) {\n      if (error instanceof ECIESError) throw error;\n      throw new ECIESError(\n        `Decryption failed: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"DECRYPTION_FAILED\",\n        error instanceof Error ? error : undefined,\n      );\n    } finally {\n      // Clear sensitive data on all code paths (success, error, throw)\n      if (sharedSecret) this.clearBuffer(sharedSecret);\n      if (kdf) this.clearBuffer(kdf);\n      if (encryptionKey) this.clearBuffer(encryptionKey);\n      if (macKey) this.clearBuffer(macKey);\n    }\n  }\n\n  /**\n   * Clears sensitive data from memory using multi-pass overwrite.\n   *\n   * @remarks\n   * Uses multiple passes with different patterns to make it harder\n   * for JIT compilers to optimize away the operation. While not\n   * guaranteed in JavaScript, this is a best-effort approach to\n   * clear sensitive data from memory.\n   *\n   * @param buffer - The buffer to clear\n   */\n  protected clearBuffer(buffer: Uint8Array): void {\n    if (buffer && buffer.length > 0) {\n      // Multi-pass overwrite to resist compiler optimization\n      buffer.fill(0x00); // Fill with zeros\n      buffer.fill(0xff); // Fill with ones\n      buffer.fill(0xaa); // Fill with alternating pattern\n      buffer.fill(0x00); // Final zero fill\n\n      // Additional pattern write to further discourage optimization\n      for (let i = 0; i < buffer.length; i++) {\n        buffer[i] = (i & 0xff) ^ 0x5a; // XOR with pattern\n      }\n      buffer.fill(0x00); // Final clear\n    }\n  }\n}\n", "/**\n * Browser implementation of ECIES using @noble/secp256k1 with Uint8Array\n *\n * @remarks\n * Uses native browser crypto APIs and @noble/secp256k1 for elliptic curve operations.\n * This implementation is polyfill-free and works in all modern browsers.\n */\n\nimport * as secp256k1 from \"@noble/secp256k1\";\nimport { BaseECIESUint8 } from \"./base\";\nimport { toHex } from \"viem\";\nimport { hmac } from \"@noble/hashes/hmac\";\nimport { sha256, sha512 as nobleSha512 } from \"@noble/hashes/sha2\";\n\n/**\n * Browser-specific ECIES provider using @noble/secp256k1\n *\n * @remarks\n * This implementation uses:\n * - Web Crypto API for AES operations\n * - @noble/secp256k1 for elliptic curve operations\n * - @noble/hashes for SHA and HMAC operations\n * - No Buffer or Node.js dependencies\n */\nexport class BrowserECIESUint8Provider extends BaseECIESUint8 {\n  protected generateRandomBytes(length: number): Uint8Array {\n    const bytes = new Uint8Array(length);\n    crypto.getRandomValues(bytes);\n    return bytes;\n  }\n\n  protected verifyPrivateKey(privateKey: Uint8Array): boolean {\n    try {\n      return secp256k1.utils.isValidPrivateKey(privateKey);\n    } catch {\n      return false;\n    }\n  }\n\n  protected createPublicKey(\n    privateKey: Uint8Array,\n    compressed: boolean,\n  ): Uint8Array | null {\n    try {\n      return secp256k1.getPublicKey(privateKey, compressed);\n    } catch {\n      return null;\n    }\n  }\n\n  protected validatePublicKey(publicKey: Uint8Array): boolean {\n    try {\n      // @noble/secp256k1 will throw if the point is not on the curve\n      secp256k1.Point.fromHex(publicKey);\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  protected decompressPublicKey(publicKey: Uint8Array): Uint8Array | null {\n    try {\n      // @noble/secp256k1 handles both compressed and uncompressed\n      const point = secp256k1.Point.fromHex(publicKey);\n      return point.toRawBytes(false); // false = uncompressed\n    } catch {\n      return null;\n    }\n  }\n\n  protected performECDH(\n    publicKey: Uint8Array,\n    privateKey: Uint8Array,\n  ): Uint8Array {\n    try {\n      // Use @noble/secp256k1's getSharedSecret which is optimized and secure\n      // The 'true' parameter returns the raw x-coordinate (32 bytes)\n      // This matches eccrypto's behavior\n      const sharedPoint = secp256k1.getSharedSecret(\n        privateKey,\n        publicKey,\n        true,\n      );\n\n      // getSharedSecret returns compressed point (33 bytes) when true\n      // We need just the x-coordinate (32 bytes) for eccrypto compatibility\n      // Remove the prefix byte\n      return sharedPoint.slice(1);\n    } catch (error) {\n      throw new Error(\n        `ECDH failed: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  protected sha512(data: Uint8Array): Uint8Array {\n    return nobleSha512(data);\n  }\n\n  protected hmacSha256(key: Uint8Array, data: Uint8Array): Uint8Array {\n    return hmac(sha256, key, data);\n  }\n\n  protected async aesEncrypt(\n    key: Uint8Array,\n    iv: Uint8Array,\n    plaintext: Uint8Array,\n  ): Promise<Uint8Array> {\n    // Import the key for AES-CBC\n    const cryptoKey = await crypto.subtle.importKey(\n      \"raw\",\n      key as BufferSource,\n      { name: \"AES-CBC\" },\n      false,\n      [\"encrypt\"],\n    );\n\n    // Encrypt with Web Crypto API\n    // Note: Web Crypto API automatically handles PKCS#7 padding for AES-CBC\n    const encrypted = await crypto.subtle.encrypt(\n      { name: \"AES-CBC\", iv: iv as BufferSource },\n      cryptoKey,\n      plaintext as BufferSource,\n    );\n\n    return new Uint8Array(encrypted);\n  }\n\n  protected async aesDecrypt(\n    key: Uint8Array,\n    iv: Uint8Array,\n    ciphertext: Uint8Array,\n  ): Promise<Uint8Array> {\n    // Import the key for AES-CBC\n    const cryptoKey = await crypto.subtle.importKey(\n      \"raw\",\n      key as BufferSource,\n      { name: \"AES-CBC\" },\n      false,\n      [\"decrypt\"],\n    );\n\n    // Decrypt with Web Crypto API\n    // Note: Web Crypto API automatically handles PKCS#7 padding removal\n    const decrypted = await crypto.subtle.decrypt(\n      { name: \"AES-CBC\", iv: iv as BufferSource },\n      cryptoKey,\n      ciphertext as BufferSource,\n    );\n\n    return new Uint8Array(decrypted);\n  }\n\n  /**\n   * Normalizes a public key to uncompressed format (65 bytes with 0x04 prefix).\n   * Handles compressed (33 bytes) and uncompressed (65 bytes) formats only.\n   *\n   * @remarks\n   * Strict policy: Does not accept 64-byte raw coordinates to avoid masking\n   * malformed data. Callers must provide properly formatted keys.\n   *\n   * @param publicKey - The public key to normalize (33 or 65 bytes)\n   * @returns The normalized uncompressed public key (65 bytes)\n   * @throws {Error} When public key format is invalid or decompression fails\n   */\n  normalizeToUncompressed(publicKey: Uint8Array): Uint8Array {\n    const len = publicKey.length;\n\n    // Already uncompressed\n    if (len === 65 && publicKey[0] === 0x04) {\n      return publicKey;\n    }\n\n    // Compressed - decompress using @noble/secp256k1\n    if (len === 33 && (publicKey[0] === 0x02 || publicKey[0] === 0x03)) {\n      const decompressed = this.decompressPublicKey(publicKey);\n      if (!decompressed) {\n        throw new Error(\n          `Failed to decompress public key with prefix ${toHex(publicKey[0])}`,\n        );\n      }\n      return decompressed;\n    }\n\n    // Reject raw coordinates (64 bytes) - require proper formatting\n    if (len === 64) {\n      throw new Error(\n        \"Raw public key coordinates (64 bytes) are not accepted. \" +\n          \"Please provide a properly formatted compressed (33 bytes) or uncompressed (65 bytes) public key.\",\n      );\n    }\n\n    throw new Error(\n      `Invalid public key format: expected compressed (33 bytes) or uncompressed (65 bytes), got ${len} bytes`,\n    );\n  }\n}\n", "/**\n * Provides browser-specific implementations of platform abstraction interfaces.\n *\n * @remarks\n * This module implements all platform-specific operations for browser environments,\n * using native Web APIs and browser-compatible libraries. It avoids Node.js-specific\n * dependencies like Buffer, using Uint8Array and viem utilities instead. Uses a\n * custom ECIES implementation with @noble/secp256k1 for pure JavaScript crypto.\n *\n * @example\n * ```typescript\n * // Use the browser platform adapter\n * import { BrowserPlatformAdapter } from '@vana-sdk/platform/browser';\n *\n * const adapter = new BrowserPlatformAdapter();\n *\n * // Encrypt data with public key\n * const encrypted = await adapter.crypto.encryptWithPublicKey(\n *   'sensitive data',\n *   '0x04...' // Public key hex\n * );\n *\n * // Use sessionStorage-backed cache\n * adapter.cache.set('temp_key', 'cached_value');\n * ```\n *\n * @category Platform\n * @module platform/browser\n */\n\nimport type {\n  VanaPlatformAdapter,\n  VanaCryptoAdapter,\n  VanaPGPAdapter,\n  VanaHttpAdapter,\n  VanaCacheAdapter,\n} from \"./interface\";\nimport { getPGPKeyGenParams } from \"./shared/pgp-utils\";\nimport { wrapCryptoError } from \"./shared/error-utils\";\nimport { lazyImport } from \"../utils/lazy-import\";\nimport { WalletKeyEncryptionService } from \"../crypto/services/WalletKeyEncryptionService\";\nimport { parseEncryptedDataBuffer } from \"../utils/crypto-utils\";\nimport { toHex, fromHex, stringToBytes, bytesToString, concat } from \"viem\";\nimport * as secp256k1 from \"@noble/secp256k1\";\n\n// Import browser ECIES provider\nimport { BrowserECIESUint8Provider } from \"../crypto/ecies/browser\";\n\n// Lazy-loaded dependencies to avoid Turbopack TDZ issues\nconst getOpenPGP = lazyImport(() => import(\"openpgp\"));\n\n/**\n * Implements cryptographic operations for browser environments.\n *\n * @remarks\n * Provides ECIES encryption/decryption, key generation, and password-based\n * encryption using a custom ECIES implementation with @noble/secp256k1.\n * Uses Uint8Array and viem utilities for browser compatibility.\n *\n * @internal\n */\nclass BrowserCryptoAdapter implements VanaCryptoAdapter {\n  private eciesProvider = new BrowserECIESUint8Provider();\n  private walletService = new WalletKeyEncryptionService({\n    eciesProvider: this.eciesProvider,\n  });\n\n  /**\n   * Encrypts data using ECIES with a public key.\n   *\n   * @param data - The plaintext string to encrypt.\n   *   Typically user data or sensitive information.\n   * @param publicKeyHex - The recipient's public key in hex format.\n   *   Can include or omit the '0x' prefix.\n   * @returns Encrypted data as a hex string without '0x' prefix\n   *\n   * @throws {Error} If encryption fails or public key is invalid\n   */\n  async encryptWithPublicKey(\n    data: string,\n    publicKeyHex: string,\n  ): Promise<string> {\n    try {\n      const prefixedHex = publicKeyHex.startsWith(\"0x\")\n        ? publicKeyHex\n        : `0x${publicKeyHex}`;\n      const publicKeyBytes = fromHex(prefixedHex as `0x${string}`, \"bytes\");\n\n      // Encrypt data using ECIES\n      const encrypted = await this.eciesProvider.encrypt(\n        publicKeyBytes,\n        stringToBytes(data),\n      );\n\n      // Concatenate all components and return as hex string\n      const result = concat([\n        encrypted.iv,\n        encrypted.ephemPublicKey,\n        encrypted.ciphertext,\n        encrypted.mac,\n      ]);\n\n      return toHex(result).slice(2); // Remove '0x' prefix for backward compatibility\n    } catch (error) {\n      throw wrapCryptoError(\"encryptWithPublicKey\", error);\n    }\n  }\n\n  /**\n   * Decrypts ECIES-encrypted data using a private key.\n   *\n   * @param encryptedData - Hex string containing encrypted data.\n   *   Can include or omit the '0x' prefix.\n   * @param privateKeyHex - The private key in hex format.\n   *   Must correspond to the public key used for encryption.\n   * @returns The decrypted plaintext string\n   *\n   * @throws {Error} If decryption fails or MAC verification fails\n   */\n  async decryptWithPrivateKey(\n    encryptedData: string,\n    privateKeyHex: string,\n  ): Promise<string> {\n    try {\n      const encryptedHex = encryptedData.startsWith(\"0x\")\n        ? encryptedData\n        : `0x${encryptedData}`;\n      const privateHex = privateKeyHex.startsWith(\"0x\")\n        ? privateKeyHex\n        : `0x${privateKeyHex}`;\n      const encryptedBytes = fromHex(encryptedHex as `0x${string}`, \"bytes\");\n      const privateKeyBytes = fromHex(privateHex as `0x${string}`, \"bytes\");\n\n      // Parse the encrypted data into components\n      const encrypted = parseEncryptedDataBuffer(encryptedBytes);\n\n      // Decrypt using ECIES\n      const decrypted = await this.eciesProvider.decrypt(\n        privateKeyBytes,\n        encrypted,\n      );\n\n      return bytesToString(decrypted);\n    } catch (error) {\n      throw wrapCryptoError(\"decryptWithPrivateKey\", error);\n    }\n  }\n\n  /**\n   * Encrypts data using a wallet's public key.\n   *\n   * @param data - The plaintext string to encrypt.\n   *   Typically permission data or DLP metadata.\n   * @param publicKey - The wallet's public key.\n   *   Automatically handles compressed/uncompressed formats.\n   * @returns Encrypted data as a hex string\n   *\n   * @throws {Error} If encryption fails or key processing fails\n   */\n  async encryptWithWalletPublicKey(\n    data: string,\n    publicKey: string,\n  ): Promise<string> {\n    try {\n      return await this.walletService.encryptWithWalletPublicKey(\n        data,\n        publicKey,\n      );\n    } catch (error) {\n      throw wrapCryptoError(\"encryptWithWalletPublicKey\", error);\n    }\n  }\n\n  /**\n   * Decrypts data using a wallet's private key.\n   *\n   * @param encryptedData - Hex string containing encrypted data.\n   *   Must be encrypted with corresponding wallet public key.\n   * @param privateKey - The wallet's private key.\n   *   Obtain from wallet connection (handle with care).\n   * @returns The decrypted plaintext string\n   *\n   * @throws {Error} If decryption fails or key is invalid\n   */\n  async decryptWithWalletPrivateKey(\n    encryptedData: string,\n    privateKey: string,\n  ): Promise<string> {\n    try {\n      return await this.walletService.decryptWithWalletPrivateKey(\n        encryptedData,\n        privateKey,\n      );\n    } catch (error) {\n      throw wrapCryptoError(\"decryptWithWalletPrivateKey\", error);\n    }\n  }\n\n  /**\n   * Generates a new secp256k1 key pair for ECIES operations.\n   *\n   * @returns Object containing hex-encoded public and private keys\n   * @returns returns.privateKey - Private key in hex format without '0x'\n   * @returns returns.publicKey - Compressed public key in hex format without '0x'\n   *\n   * @throws {Error} If key generation fails\n   */\n  async generateKeyPair(): Promise<{\n    privateKey: string;\n    publicKey: string;\n  }> {\n    try {\n      // Generate random private key\n      const privateKeyBytes = secp256k1.utils.randomPrivateKey();\n\n      // Generate public key (compressed for consistency with Node implementation)\n      const publicKeyBytes = secp256k1.getPublicKey(privateKeyBytes, true);\n\n      return {\n        privateKey: toHex(privateKeyBytes).slice(2),\n        publicKey: toHex(publicKeyBytes).slice(2),\n      };\n    } catch (error) {\n      throw wrapCryptoError(\"generateKeyPair\", error);\n    }\n  }\n\n  /**\n   * Encrypts binary data using password-based encryption.\n   *\n   * @param data - Binary data to encrypt.\n   *   Typically file contents or serialized objects.\n   * @param password - Password for encryption.\n   *   Often derived from wallet signatures.\n   * @returns Encrypted data as Uint8Array\n   *\n   * @remarks\n   * Uses OpenPGP for password-based encryption with automatic\n   * salt generation for security.\n   *\n   * @throws {Error} If encryption fails\n   */\n  async encryptWithPassword(\n    data: Uint8Array,\n    password: string,\n  ): Promise<Uint8Array> {\n    try {\n      const openpgp = await getOpenPGP();\n\n      // Create a message from the data\n      const message = await openpgp.createMessage({ binary: data });\n\n      // Encrypt with password\n      const encrypted = await openpgp.encrypt({\n        message,\n        passwords: [password],\n        format: \"binary\",\n      });\n\n      return new Uint8Array(encrypted as ArrayBuffer);\n    } catch (error) {\n      throw wrapCryptoError(\"encryptWithPassword\", error);\n    }\n  }\n\n  /**\n   * Decrypts password-encrypted binary data.\n   *\n   * @param encryptedData - Password-encrypted data as Uint8Array.\n   *   Must be encrypted with the same password.\n   * @param password - Password for decryption.\n   *   Must match the encryption password.\n   * @returns Decrypted data as Uint8Array\n   *\n   * @throws {Error} If decryption fails or password is incorrect\n   */\n  async decryptWithPassword(\n    encryptedData: Uint8Array,\n    password: string,\n  ): Promise<Uint8Array> {\n    try {\n      const openpgp = await getOpenPGP();\n\n      // Read the encrypted message\n      const message = await openpgp.readMessage({\n        binaryMessage: encryptedData,\n      });\n\n      // Decrypt with password\n      const { data } = await openpgp.decrypt({\n        message,\n        passwords: [password],\n        format: \"binary\",\n      });\n\n      return new Uint8Array(data as ArrayBuffer);\n    } catch (error) {\n      throw wrapCryptoError(\"decryptWithPassword\", error);\n    }\n  }\n}\n\n/**\n * Implements PGP operations for browser environments.\n *\n * @remarks\n * Provides PGP encryption, decryption, and key generation using the OpenPGP.js\n * library with browser-optimized configuration.\n *\n * @internal\n */\nclass BrowserPGPAdapter implements VanaPGPAdapter {\n  /**\n   * Encrypts data using PGP public key encryption.\n   *\n   * @param data - The plaintext string to encrypt.\n   *   Typically messages or structured data.\n   * @param publicKeyArmored - ASCII-armored PGP public key.\n   *   Obtain from PGP key generation or key servers.\n   * @returns ASCII-armored encrypted message\n   *\n   * @throws {Error} If encryption fails or public key is invalid\n   */\n  async encrypt(data: string, publicKeyArmored: string): Promise<string> {\n    try {\n      const openpgp = await getOpenPGP();\n      const publicKey = await openpgp.readKey({ armoredKey: publicKeyArmored });\n\n      const encrypted = await openpgp.encrypt({\n        message: await openpgp.createMessage({ text: data }),\n        encryptionKeys: publicKey,\n        config: {\n          preferredCompressionAlgorithm: openpgp.enums.compression.zlib,\n        },\n      });\n\n      return encrypted as string;\n    } catch (error) {\n      throw new Error(`PGP encryption failed: ${String(error)}`);\n    }\n  }\n\n  /**\n   * Decrypts PGP-encrypted data using a private key.\n   *\n   * @param encryptedData - ASCII-armored encrypted message.\n   *   Must be encrypted with corresponding public key.\n   * @param privateKeyArmored - ASCII-armored PGP private key.\n   *   Must correspond to the public key used for encryption.\n   * @returns The decrypted plaintext string\n   *\n   * @throws {Error} If decryption fails or private key is invalid\n   */\n  async decrypt(\n    encryptedData: string,\n    privateKeyArmored: string,\n  ): Promise<string> {\n    try {\n      const openpgp = await getOpenPGP();\n      const privateKey = await openpgp.readPrivateKey({\n        armoredKey: privateKeyArmored,\n      });\n      const message = await openpgp.readMessage({\n        armoredMessage: encryptedData,\n      });\n\n      const { data: decrypted } = await openpgp.decrypt({\n        message,\n        decryptionKeys: privateKey,\n      });\n\n      return decrypted as string;\n    } catch (error) {\n      throw new Error(`PGP decryption failed: ${String(error)}`);\n    }\n  }\n\n  /**\n   * Generates a new PGP key pair.\n   *\n   * @param options - Key generation options\n   * @param options.name - Name for the key identity.\n   *   Defaults to 'Vana User'.\n   * @param options.email - Email for the key identity.\n   *   Defaults to 'user@vana.com'.\n   * @param options.passphrase - Passphrase to protect the private key.\n   *   If not provided, key is unprotected.\n   * @returns ASCII-armored public and private keys\n   *\n   * @throws {Error} If key generation fails\n   */\n  async generateKeyPair(options?: {\n    name?: string;\n    email?: string;\n    passphrase?: string;\n  }): Promise<{ publicKey: string; privateKey: string }> {\n    try {\n      const openpgp = await getOpenPGP();\n      // Use shared utility to get standardized parameters\n      const keyGenParams = getPGPKeyGenParams(options);\n\n      const { privateKey, publicKey } = await openpgp.generateKey(keyGenParams);\n\n      return { publicKey, privateKey };\n    } catch (error) {\n      throw wrapCryptoError(\"PGP key generation\", error);\n    }\n  }\n}\n\n/**\n * Implements HTTP operations for browser environments.\n *\n * @remarks\n * Uses the native Fetch API available in all modern browsers.\n *\n * @internal\n */\nclass BrowserHttpAdapter implements VanaHttpAdapter {\n  /**\n   * Performs an HTTP request using the Fetch API.\n   *\n   * @param url - The URL to fetch.\n   *   Must be a valid HTTP/HTTPS URL.\n   * @param options - Standard fetch options.\n   *   See MDN fetch documentation for details.\n   * @returns Standard fetch Response object\n   */\n  async fetch(url: string, options?: RequestInit): Promise<Response> {\n    return fetch(url, options);\n  }\n}\n\n/**\n * Implements secure caching for browser environments.\n *\n * @remarks\n * Uses sessionStorage for temporary caching that's automatically cleared\n * when the browser tab closes. This provides better security for sensitive\n * data like signatures compared to localStorage. All keys are prefixed to\n * avoid conflicts with other applications.\n *\n * @internal\n */\nclass BrowserCacheAdapter implements VanaCacheAdapter {\n  private readonly prefix = \"vana_cache_\";\n\n  /**\n   * Retrieves a cached value by key.\n   *\n   * @param key - The cache key to look up.\n   *   Automatically prefixed to avoid conflicts.\n   * @returns The cached value or null if not found\n   */\n  get(key: string): string | null {\n    try {\n      if (typeof sessionStorage === \"undefined\") {\n        return null;\n      }\n      return sessionStorage.getItem(this.prefix + key);\n    } catch {\n      return null;\n    }\n  }\n\n  /**\n   * Stores a value in sessionStorage.\n   *\n   * @param key - The cache key.\n   *   Automatically prefixed with 'vana_cache_'.\n   * @param value - The value to cache.\n   *   Will be cleared when tab closes.\n   */\n  set(key: string, value: string): void {\n    try {\n      if (typeof sessionStorage === \"undefined\") {\n        return;\n      }\n      sessionStorage.setItem(this.prefix + key, value);\n    } catch {\n      // Ignore storage errors (quota exceeded, etc.)\n    }\n  }\n\n  /**\n   * Removes a specific key from the cache.\n   *\n   * @param key - The cache key to remove.\n   *   Only removes the prefixed key.\n   */\n  delete(key: string): void {\n    try {\n      if (typeof sessionStorage === \"undefined\") {\n        return;\n      }\n      sessionStorage.removeItem(this.prefix + key);\n    } catch {\n      // Ignore storage errors\n    }\n  }\n\n  /**\n   * Clears all Vana-prefixed cache entries.\n   *\n   * @remarks\n   * Only removes entries with the 'vana_cache_' prefix,\n   * preserving other sessionStorage data.\n   */\n  clear(): void {\n    try {\n      if (typeof sessionStorage === \"undefined\") {\n        return;\n      }\n      // Only clear our prefixed keys to avoid affecting other data\n      const keysToRemove: string[] = [];\n      for (let i = 0; i < sessionStorage.length; i++) {\n        const key = sessionStorage.key(i);\n        if (key?.startsWith(this.prefix)) {\n          keysToRemove.push(key);\n        }\n      }\n      keysToRemove.forEach((key) => {\n        sessionStorage.removeItem(key);\n      });\n    } catch {\n      // Ignore storage errors\n    }\n  }\n}\n\n/**\n * Provides complete platform abstraction for browser environments.\n *\n * @remarks\n * This adapter aggregates all browser-specific implementations of platform\n * operations. It uses native Web APIs where possible and browser-compatible\n * libraries for crypto and PGP operations using a custom ECIES implementation\n * with @noble/secp256k1 for pure JavaScript cryptography.\n *\n * @example\n * ```typescript\n * // Create a browser adapter instance\n * const adapter = new BrowserPlatformAdapter();\n *\n * // All platform operations are available\n * const encrypted = await adapter.crypto.encryptWithPublicKey(\n *   'secret',\n *   publicKey\n * );\n *\n * const response = await adapter.http.fetch('/api/data');\n *\n * adapter.cache.set('key', 'value'); // Uses sessionStorage\n * ```\n *\n * @category Platform\n */\nexport class BrowserPlatformAdapter implements VanaPlatformAdapter {\n  public readonly crypto = new BrowserCryptoAdapter();\n  public readonly pgp = new BrowserPGPAdapter();\n  public readonly http = new BrowserHttpAdapter();\n  public readonly cache = new BrowserCacheAdapter();\n  public readonly platform = \"browser\" as const;\n}\n", "/**\n * @module Node\n * Node.js entry point for the Vana SDK.\n *\n * @remarks\n * Exposes the platform adapter, ECIES crypto, storage providers, smart-contract\n * helpers, ABIs, addresses, chain configurations, and shared types.\n */\n\n// Type re-exports\nexport type * from \"./types\";\n\n// Errors\nexport * from \"./errors\";\n\n// Contract controller (L1 + smart contract integration)\nexport * from \"./contracts/contractController\";\n\n// ABIs\nexport { getAbi } from \"./generated/abi\";\nexport type {\n  VanaContract,\n  VanaContract as VanaContractAbi,\n} from \"./generated/abi\";\n\n// Addresses\nexport { getContractAddress, CONTRACTS } from \"./generated/addresses\";\nexport type { VanaContractAddress } from \"./generated/addresses\";\n\n// Chain configurations\nexport {\n  vanaMainnet,\n  mokshaTestnet,\n  moksha,\n  type VanaChainConfig,\n  getChainConfig,\n  getAllChains,\n} from \"./chains\";\nexport * from \"./chains\";\n\n// viem chain registry\nexport { chains } from \"./config/chains\";\n\n// Default service endpoints\nexport {\n  type ServiceEndpoints,\n  mainnetServices,\n  mokshaServices,\n  getServiceEndpoints,\n} from \"./config/default-services\";\n\n// Storage API\nexport * from \"./storage/index\";\nexport { createVanaStorageProvider } from \"./storage/default\";\nexport type { VanaStorageProviderOptions } from \"./storage/default\";\n\n// Platform adapters\nexport { NodePlatformAdapter } from \"./platform/node\";\nexport { BrowserPlatformAdapter } from \"./platform/browser\";\nexport { NodeECIESUint8Provider as NodeECIESProvider } from \"./crypto/ecies/node\";\nexport type { VanaPlatformAdapter } from \"./platform/interface\";\n\n// ECIES utilities\nexport {\n  ECIESError,\n  isECIESEncrypted,\n  serializeECIES,\n  deserializeECIES,\n} from \"./crypto/ecies\";\nexport type {\n  ECIESProvider,\n  ECIESEncrypted,\n  ECIESOptions,\n} from \"./crypto/ecies\";\n\n// Platform utilities\nexport {\n  detectPlatform,\n  createPlatformAdapter,\n  createPlatformAdapterFor,\n  isPlatformSupported,\n  getPlatformCapabilities,\n} from \"./platform/utils\";\n\n// Browser-safe platform utilities\nexport {\n  createNodePlatformAdapter,\n  createBrowserPlatformAdapter,\n  createPlatformAdapterSafe,\n} from \"./platform/browser-safe\";\n\n// HKDF / master key derivation (DPv1 envelope)\nexport {\n  deriveMasterKey,\n  deriveScopeKey,\n  recoverServerOwner,\n  MASTER_KEY_MESSAGE,\n} from \"./crypto/keys/derive\";\n\n// OpenPGP file encryption (DPv1 envelope)\nexport {\n  encryptWithPassword,\n  decryptWithPassword,\n} from \"./crypto/envelope/openpgp\";\n\n// Web3Signed auth primitives\nexport {\n  parseWeb3SignedHeader,\n  verifyWeb3Signed,\n  type Web3SignedPayload,\n  type VerifiedAuth,\n} from \"./auth/web3-signed\";\nexport {\n  buildWeb3SignedHeader,\n  computeBodyHash,\n  type Web3SignedSignFn,\n} from \"./auth/web3-signed-builder\";\nexport {\n  MissingAuthError,\n  InvalidSignatureError,\n  ExpiredTokenError,\n} from \"./auth/errors\";\n\n// PKCE + token-store (OAuth client primitives)\nexport {\n  generatePkceVerifier,\n  computePkceChallenge,\n  verifyPkceChallenge,\n  assertValidPkceVerifier,\n  PKCE_VERIFIER_PATTERN,\n  PKCE_CHALLENGE_PATTERN,\n} from \"./auth/pkce\";\nexport {\n  InMemoryTokenStore,\n  type TokenStore,\n  type TokenRecord,\n} from \"./auth/token-store\";\nexport {\n  OAuthClient,\n  type OAuthClientConfig,\n  type AuthorizationUrlResult,\n} from \"./auth/oauth-client\";\n\n// Data Portability protocol signing helpers\nexport {\n  NATIVE_VANA_ASSET,\n  dataRegistryDomain,\n  grantRegistrationDomain,\n  grantRevocationDomain,\n  serverRegistrationDomain,\n  builderRegistrationDomain,\n  escrowPaymentDomain,\n  withdrawAuthorizationDomain,\n  buildWithdrawAuthorizationTypedData,\n  GRANT_REGISTRATION_TYPES,\n  GRANT_REVOCATION_TYPES,\n  SERVER_REGISTRATION_TYPES,\n  BUILDER_REGISTRATION_TYPES,\n  ADD_DATA_TYPES,\n  RECORD_DATA_ACCESS_TYPES,\n  WITHDRAW_AUTHORIZATION_TYPES,\n  type DataPortabilityContracts,\n  type DataPortabilityGatewayConfig,\n  type GrantRegistrationMessage,\n  type GrantRevocationMessage,\n  type ServerRegistrationMessage,\n  type BuilderRegistrationMessage,\n  type AddDataMessage,\n  type RecordDataAccessMessage,\n  type WithdrawAuthorizationMessage,\n} from \"./protocol/eip712\";\nexport {\n  ENCLAVE_IDENTITY_EVIDENCE_VERSION,\n  USER_PS_ID_DOMAIN,\n  ENCLAVE_WALLET_PURPOSE,\n  MASTER_SIGNATURE_DELIVERY_VERSION,\n  MASTER_SIGNATURE_DELIVERY_MAX_AGE_SECONDS,\n  SEALED_ENVELOPE_VERSION,\n  ENCLAVE_TRUST_ANCHORS,\n  userPsId,\n  appRootPreimage,\n  kmsIssuedPreimage,\n  verifyEnclaveIdentityEvidence,\n  buildMasterSignatureDelivery,\n  encryptMasterSignatureDelivery,\n  type UserPsId,\n  type EnclaveIdentityEvidence,\n  type ExpectedIdentity,\n  type IdentityRequest,\n  type IdentityState,\n  type IdentityResponse,\n  type IdentityRegistrationRequest,\n  type IdentityRegistrationResponse,\n  type MasterSignatureDelivery,\n  type SealedSecretSubmission,\n  type SealedSecretResponse,\n  type AesGcmBox,\n  type SealedEnvelope,\n  type EnclaveTrustAnchors,\n} from \"./protocol/identity\";\nexport {\n  JOB_PROTOCOL_VERSION,\n  JOB_OPERATIONS,\n  JOB_STATES,\n  DEFAULT_LEASE_SECONDS,\n  MAX_LEASE_SECONDS,\n  MAX_ATTEMPTS,\n  MAX_WAIT_SECONDS,\n  CLAIM_POLL_FLOOR_MS,\n  DEFAULT_JOB_DEADLINE_SECONDS,\n  MAX_JOB_DEADLINE_SECONDS,\n  type JobOperation,\n  type JobState,\n  type PaymentState,\n  type JobRequest,\n  type JobRequestEnvelope,\n  type JobAccessRecord,\n  type JobPaymentAuthorization,\n  type JobQuote,\n  type JobSubmission,\n  type ResultHandle,\n  type JobStatus,\n  type ClaimRequest,\n  type ClaimResponse,\n  type HeartbeatRequest,\n  type CompleteRequest,\n  type FailRequest,\n  type FencedResponse,\n  type JobResult,\n  type TeeNodeState,\n  type TeeNodeRegistration,\n  type TeeNodeHeartbeat,\n  type TeeNode,\n} from \"./protocol/jobs\";\nexport {\n  createJobsClient,\n  type JobsBuilderAccount,\n  type JobsClientOptions,\n  type SubmitRawReadParams,\n  type SubmitRawReadResult,\n  type WaitForJobOptions,\n  type OpenJobResultOptions,\n  type ReadRawParams,\n  type JobsClient,\n} from \"./protocol/jobs-client\";\nexport {\n  JobEnvelopeError,\n  JOB_RESULT_FORMAT_VERSION,\n  JOB_RESULT_CHUNK_BYTES,\n  canonicalJobRequestBytes,\n  sealJobRequest,\n  openJobRequest,\n  sealJobResultStream,\n  openJobResultStream,\n  sealJobResult,\n  openJobResult,\n  type JobResultMetadata,\n  type JobResultExpectation,\n  type SealedJobResultStream,\n  type OpenedJobResultStream,\n} from \"./crypto/envelope/job\";\nexport {\n  PERSONAL_SERVER_REGISTRATION_DEFAULT_CHAIN_ID,\n  PERSONAL_SERVER_REGISTRATION_DEFAULT_VERIFYING_CONTRACT,\n  personalServerRegistrationDomain,\n  createViemPersonalServerRegistrationSigner,\n  buildPersonalServerRegistrationTypedData,\n  buildPersonalServerRegistrationSignature,\n  registerPersonalServerSignature,\n  type PersonalServerRegistrationTypedData,\n  type PersonalServerRegistrationSigner,\n  type PersonalServerRegistrationDomainInput,\n  type ViemPersonalServerRegistrationWalletClient,\n  type ViemPersonalServerRegistrationSignerSource,\n  type BuildPersonalServerRegistrationTypedDataInput,\n  type BuildPersonalServerRegistrationSignatureInput,\n  type PersonalServerRegistrationSignature,\n} from \"./protocol/personal-server-registration\";\nexport {\n  PERSONAL_SERVER_LITE_OWNER_BINDING_VERSION,\n  PERSONAL_SERVER_LITE_OWNER_BINDING_PURPOSE,\n  PERSONAL_SERVER_LITE_OWNER_BINDING_PREFIX,\n  buildPersonalServerLiteOwnerBindingMessage,\n  createViemPersonalServerLiteOwnerBindingSigner,\n  buildPersonalServerLiteOwnerBindingSignature,\n  signPersonalServerLiteOwnerBinding,\n  type PersonalServerLiteOwnerBindingPurpose,\n  type PersonalServerLiteOwnerBindingMessage,\n  type PersonalServerLiteOwnerBindingSigner,\n  type ViemPersonalServerLiteOwnerBindingWalletClient,\n  type ViemPersonalServerLiteOwnerBindingSignerSource,\n  type BuildPersonalServerLiteOwnerBindingSignatureInput,\n  type PersonalServerLiteOwnerBindingSignature,\n} from \"./personal-server-lite/owner-binding\";\nexport {\n  ACCOUNT_PERSONAL_SERVER_REGISTRATION_INTENT,\n  AccountPersonalServerRegistrationError,\n  signPersonalServerRegistrationWithAccount,\n  type AccountPersonalServerRegistrationIntent,\n  type AccountPersonalServerRegistrationSignature,\n  type AccountPersonalServerRegistrationStatus,\n  type AccountPersonalServerRegistrationRequest,\n  type AccountPersonalServerRegistrationConfig,\n  type AccountSignedPersonalServerRegistration,\n  type AccountConfirmationRequiredPersonalServerRegistration,\n  type AccountFallbackSignedPersonalServerRegistration,\n  type AccountPersonalServerRegistrationResult,\n} from \"./account/personal-server-registration\";\nexport {\n  AccountPersonalServerLiteOwnerBindingError,\n  signPersonalServerLiteOwnerBindingWithAccountClient,\n  type AccountPersonalServerLiteOwnerBindingClient,\n  type SignPersonalServerLiteOwnerBindingWithAccountClientConfig,\n} from \"./account/personal-server-lite-owner-binding\";\nexport {\n  isDataPortabilityGatewayConfig,\n  verifyGrantRegistration,\n  type VerifyGrantRegistrationInput,\n  type VerifyGrantRegistrationResult,\n} from \"./protocol/grants\";\nexport {\n  FEE_REGISTRY_ABI,\n  REGISTRATION_KIND_FOR_OP,\n  getFee,\n  getOpFee,\n  type FeeKind,\n  type FeeEntry,\n  type OpFee,\n  type FeeRegistryOptions,\n} from \"./protocol/fee-registry\";\nexport {\n  escrowContractAddress,\n  encodeDepositNativeData,\n  encodeDepositTokenData,\n  buildDepositNativeRequest,\n  buildDepositTokenRequest,\n  type DepositNativeInput,\n  type DepositTokenInput,\n  type DepositTransactionRequest,\n} from \"./protocol/escrow-deposit\";\nexport {\n  DATA_REGISTRY_STATUS_ABI,\n  DataPointStatus,\n  dataRegistryContractAddress,\n  encodeSetDataPointStatusData,\n  buildSetDataPointStatusRequest,\n  buildMarkDataPointUnavailableRequest,\n  type SetDataPointStatusInput,\n  type DataPointStatusTransactionRequest,\n} from \"./protocol/data-point-status\";\nexport {\n  TOMBSTONE_DATA_HASH,\n  TOMBSTONE_METADATA_HASH,\n  TOMBSTONE_DATA_HASH_PREIMAGE,\n  TOMBSTONE_METADATA_HASH_PREIMAGE,\n  computeTombstoneHash,\n  isTombstoneHashes,\n  isDataPointTombstone,\n  tombstoneDeletedAt,\n  createViemDataPointDeletionSigner,\n  buildDataPointDeletionTypedData,\n  buildDataPointDeletionSignature,\n  deleteDataPoint,\n  type DataPointDeletionTypedData,\n  type DataPointDeletionSigner,\n  type ViemDataPointDeletionWalletClient,\n  type ViemDataPointDeletionSignerSource,\n  type BuildDataPointDeletionTypedDataInput,\n  type BuildDataPointDeletionSignatureInput,\n  type DataPointDeletionSignature,\n  type DataPointBlobDeleteResult,\n  type DataPointBlobStore,\n  type DeleteDataPointInput,\n  type DataPointDeletedResult,\n  type DataPointDeletionPartialResult,\n  type DataPointDeletionResult,\n} from \"./protocol/data-point-deletion\";\nexport {\n  personalServerDataReadPath,\n  buildPersonalServerDataReadRequest,\n  readPersonalServerData,\n  type BuildPersonalServerDataReadRequestParams,\n  type ReadPersonalServerDataParams,\n} from \"./protocol/personal-server-data\";\nexport {\n  ScopeSchema,\n  parseScope,\n  scopeToPathSegments,\n  scopeMatchesPattern,\n  scopeCoveredByGrant,\n  type Scope,\n  type ParsedScope,\n} from \"./protocol/scopes\";\nexport {\n  SCOPE_ACTIONS,\n  InvalidScopeEntryError,\n  parseScopeEntry,\n  formatScopeEntry,\n  grantPermissions,\n  permissionsToScopes,\n  tryGrantPermissions,\n  hasAction,\n  type ScopeAction,\n  type ParsedScopeEntry,\n  type GrantPermission,\n} from \"./protocol/scope-actions\";\nexport {\n  WRITE_SESSION_PATH,\n  WRITE_SIGNATURE_HEADER,\n  WRITE_METADATA_HEADER,\n  WRITE_FILENAME_HEADER,\n  WRITE_CONTENT_DISPOSITION_HEADER,\n  WRITER_ATTRIBUTION_KEY,\n  LINEAGE_KEY,\n  LINEAGE_FIELD,\n  MAX_LINEAGE_SOURCES,\n  RESERVED_WRITE_KEYS,\n  openWriteSession,\n  writeData,\n  writePersonalServerData,\n  sessionCoversScope,\n  binaryWriteSignedBytes,\n  normalizeBinaryMimeType,\n  parseWriteMetadataHeader,\n  encodeWriteMetadataHeader,\n  type WriteTransportRetryOptions,\n  type WriteSession,\n  type OpenWriteSessionParams,\n  type WriteBinaryPayload,\n  type LineageSource,\n  type WriteJsonDataParams,\n  type WriteBinaryDataParams,\n  type WriteDataParams,\n  type WriteDataResult,\n  type WritePersonalServerDataParams,\n  type WritePersonalServerDataResult,\n  type BinaryWriteSignedBytesInput,\n} from \"./protocol/personal-server-write\";\nexport {\n  resolveWriteSigner,\n  type WriteSigner,\n  type WriteSignerSource,\n  type ViemWriteAccount,\n  type ViemWriteWalletClient,\n  type ResolveWriteSignerOptions,\n} from \"./protocol/write-signer\";\nexport {\n  DERIVATIVE_QUESTIONS_PATH,\n  MAX_QUESTION_SOURCE_SCOPES,\n  MAX_QUESTION_CHARS,\n  MAX_QUESTION_MODEL_CHARS,\n  DEFAULT_QUESTION_TIMEOUT_MS,\n  DEFAULT_QUESTION_POLL_INTERVAL_MS,\n  QUESTION_STATUSES,\n  DERIVATIVE_ERROR_CODES,\n  DerivativeErrorCodeSchema,\n  type DerivativeErrorCode,\n  registerQuestion,\n  getQuestion,\n  listQuestions,\n  recomputeQuestion,\n  deleteQuestion,\n  waitForQuestion,\n  askPersonalServer,\n  QuestionStatusSchema,\n  QuestionRegisteredBySchema,\n  DerivativeQuestionSchema,\n  QuestionRecomputeResultSchema,\n  QuestionDeleteResultSchema,\n  type QuestionStatus,\n  type QuestionRegisteredBy,\n  type DerivativeQuestion,\n  type QuestionRecomputeResult,\n  type QuestionDeleteResult,\n  type DerivativeQuestionAuthParams,\n  type RegisterQuestionParams,\n  type GetQuestionParams,\n  type ListQuestionsParams,\n  type RecomputeQuestionParams,\n  type DeleteQuestionParams,\n  type WaitForQuestionParams,\n  type AskPersonalServerParams,\n  type AskPersonalServerResult,\n} from \"./protocol/derivative-questions\";\nexport {\n  DERIVATIVE_STATUS_PATH,\n  DEFAULT_DERIVATIVE_STATUS_TIMEOUT_MS,\n  DEFAULT_DERIVATIVE_STATUS_POLL_INTERVAL_MS,\n  derivativeStatusTarget,\n  getDerivativeStatus,\n  waitForDerivativeStatus,\n  isDerivativeStatusSettled,\n  DerivativeStatusSchema,\n  type DerivativeStatus,\n  type GetDerivativeStatusParams,\n  type WaitForDerivativeStatusParams,\n} from \"./protocol/derivative-status\";\nexport {\n  deriveDataPointId,\n  isDataPointId,\n  scopeNamespace,\n  derivedScopeViolatesNaming,\n  assertDerivedScopeNaming,\n  isRedactedLineageNode,\n  personalServerLineagePath,\n  gatewayLineagePath,\n  getLineage,\n  getPersonalServerLineage,\n  getGatewayLineage,\n  LineageNodeSchema,\n  RedactedLineageNodeSchema,\n  LineageEntrySchema,\n  LineageGraphSchema,\n  type LineageNode,\n  type RedactedLineageNode,\n  type LineageEntry,\n  type LineageGraph,\n  type LineageReadResult,\n  type PersonalServerLineageParams,\n  type GatewayLineageParams,\n  type GetLineageParams,\n} from \"./protocol/lineage\";\nexport {\n  DataFileEnvelopeSchema,\n  createDataFileEnvelope,\n  IngestResponseSchema,\n  type DataFileEnvelope,\n  type IngestResponse,\n} from \"./protocol/data-file\";\nexport {\n  createGatewayClient,\n  type GatewayEnvelope,\n  type GatewayProof,\n  type Builder,\n  type Schema,\n  type ServerInfo,\n  type OwnerServerRecord,\n  type OwnerServersResult,\n  type GatewayGrantFee,\n  type GatewayGrantStatus,\n  type GatewayGrantResponse,\n  type GrantListItem,\n  type DataPointRecord,\n  type DataPointListResult,\n  type ListDataPointsOptions,\n  type RegisterServerParams,\n  type RegisterServerResult,\n  type RegisterBuilderParams,\n  type RegisterBuilderResult,\n  type RegisterDataPointParams,\n  type RegisterDataPointResult,\n  type GetDataPointOptions,\n  type DeleteDataPointParams,\n  type DeleteDataPointResult,\n  type CreateGrantParams,\n  type RevokeGrantParams,\n  type AccessRecord,\n  type PayForOperationParams,\n  type PayForOperationResult,\n  type SettleOpType,\n  type SettleItem,\n  type SettlePromoteResult,\n  type SettleReconcileItem,\n  type SettleParams,\n  type SettleResult,\n  type GatewayClient,\n} from \"./protocol/gateway\";\n// DPv2 escrow payment helpers\nexport {\n  createEscrowGatewayClient,\n  genericPaymentDomain,\n  GENERIC_PAYMENT_TYPES,\n  ESCROW_DEPOSIT_ABI,\n  NATIVE_ASSET_ADDRESS,\n  type GenericPaymentMessage,\n  type EscrowBalanceEntry,\n  type EscrowBalanceResult,\n  type EscrowBalanceSyncResult,\n  type DepositSubmissionResult,\n  type PaymentBreakdown,\n  type EscrowPayResult,\n  EscrowWithdrawalLifecycleError,\n  EscrowWithdrawalRejectionError,\n  type EscrowPaymentClient,\n  type EscrowWithdrawalFailureResult,\n  type EscrowWithdrawalRejectedResult,\n  type EscrowWithdrawalRejectionCode,\n  type EscrowWithdrawalSubmittedResult,\n  type EscrowWithdrawalSubmittedWithoutTransaction,\n  type EscrowWithdrawalSubmittedWithTransaction,\n  type EscrowWithdrawalSettledResult,\n  type EscrowWithdrawalResult,\n  type SubmitDepositParams,\n  type PayForOpParams,\n  type WithdrawFromEscrowParams,\n  type WithdrawNonceResponse,\n  type EscrowGatewayClient,\n  type SubmittedDepositEntry,\n  type FinalizedDepositEntry,\n  type FailedDepositEntry,\n} from \"./protocol/escrow\";\n\n// Personal Server escrow payment helpers (server-side direct data flow).\nexport {\n  authorizeEscrowPayment,\n  authorizeGrantPayment,\n  buildEscrowPaymentHeader,\n  buildGrantPaymentHeader,\n  createDefaultNonceSource,\n  DATA_ACCESS_OP_TYPE,\n  GRANT_OP_TYPE,\n  paymentReceiptFromHeader,\n  paymentResponseMetadataFromHeader,\n  toDirectFeeBreakdown,\n  toDirectPaymentReceipt,\n  type EscrowPaymentConfig,\n  type EscrowPaymentHeaderConfig,\n  type PaymentNonceSource,\n  type SignTypedDataFn,\n} from \"./direct/escrow-payment\";\nexport {\n  parsePersonalServerPaymentRequired,\n  type FetchResponseLike,\n} from \"./direct/personal-server-read\";\nexport type {\n  ForegroundDelivery,\n  DirectPaymentResponseMetadata,\n  PersonalServerDataAccessPaymentOperation,\n  PersonalServerGrantPaymentOperation,\n  PersonalServerPaymentOperation,\n  PersonalServerPaymentRequired,\n} from \"./direct/types\";\n\n// Personal Server typed errors\nexport { PSError, parsePSError, type PSErrorCode } from \"./types/ps-errors\";\n", "/**\n * Provides type-safe contract interaction utilities for the Vana protocol.\n *\n * @remarks\n * This module enables strongly-typed smart contract interactions with automatic\n * ABI loading, address resolution, and instance caching. It follows viem's patterns\n * for contract typing while providing Vana-specific conveniences.\n *\n * @category Contracts\n * @module contractController\n */\n\nimport type { Abi } from \"abitype\";\nimport {\n  getContract,\n  type GetContractReturnType,\n  type PublicClient,\n  type WalletClient,\n} from \"viem\";\nimport { type ContractAbis, getAbi, type VanaContract } from \"../generated/abi\";\nimport type { VanaChainId, ContractInfo } from \"../types/index\";\nimport {\n  getContractAddress,\n  CONTRACT_ADDRESSES,\n  type VanaContractAddress,\n} from \"../generated/addresses\";\nimport { createClient } from \"../core/client\";\nimport { vanaMainnet } from \"../config/chains\";\n\ntype AddressedVanaContract = Extract<VanaContract, VanaContractAddress>;\n\n// Cache for contract instances - keyed by contract name and chain ID\nconst contractCache = new Map<string, GetContractReturnType<Abi>>();\n\n// Export cache for testing\nexport const contractCacheForTesting = contractCache;\n\n/**\n * Creates a cache key for contract instances.\n *\n * @remarks\n * Generates unique keys for caching contract instances per chain to prevent\n * cross-chain contamination and improve performance.\n *\n * @param contract - The contract name to create a cache key for\n * @param chainId - The chain ID to include in the cache key\n * @returns A string cache key combining contract name and chain ID\n *\n * @internal\n */\nfunction createCacheKey(\n  contract: AddressedVanaContract,\n  chainId: number,\n): string {\n  return `${contract}:${chainId}`;\n}\n\n/**\n * Gets a typed contract instance for the specified contract name.\n *\n * @remarks\n * Provides complete type safety following viem's patterns with automatic\n * ABI loading and address resolution. Contract instances are cached per\n * chain for performance. Use const assertion for full type inference.\n *\n * @param contract - Name of the contract to instantiate.\n *   Use const assertion for full typing: `\"DataRegistry\" as const`\n * @param client - Optional viem client instance.\n *   Defaults to auto-configured client. Obtain via `createClient()` or viem.\n * @returns A fully typed contract instance with methods corresponding to the contract's ABI\n *\n * @example\n * ```typescript\n * // Full type inference with const assertion\n * const dataRegistry = getContractController(\"DataRegistry\" as const, client);\n *\n * // Now dataRegistry has full type inference for all methods\n * const result = await dataRegistry.read.getFileCount(); // Type: bigint\n * await dataRegistry.write.addFile([url, proof]); // Typed parameters\n *\n * // Auto-configured client\n * const permissions = getContractController(\"DataPortabilityPermissions\" as const);\n * const granted = await permissions.read.hasPermission([grantor, grantee]);\n * ```\n *\n * @category Contracts\n */\nexport function getContractController<T extends AddressedVanaContract>(\n  contract: T,\n  client:\n    | PublicClient\n    | WalletClient\n    | ReturnType<typeof createClient> = createClient(),\n): GetContractReturnType<ContractAbis[T]> {\n  const chainId = client.chain?.id ?? vanaMainnet.id;\n  const cacheKey = createCacheKey(contract, chainId);\n\n  let controller = contractCache.get(cacheKey);\n\n  if (!controller) {\n    controller = getContract({\n      address: getContractAddress(chainId, contract),\n      abi: getAbi(contract),\n      client,\n    }) as GetContractReturnType<ContractAbis[T]>;\n\n    contractCache.set(cacheKey, controller);\n  }\n\n  return controller as GetContractReturnType<ContractAbis[T]>;\n}\n\n/**\n * Gets contract information without creating a contract instance.\n *\n * @remarks\n * Returns contract address and ABI for manual contract interaction or\n * custom client configuration. Useful when you need contract details\n * but don't want to create a client connection.\n *\n * @param contract - Name of the contract.\n *   Use const assertion for typed ABI.\n * @param chainId - Chain ID to get contract info for.\n *   Defaults to Vana mainnet (1480).\n * @returns Contract information with typed ABI\n *\n * @example\n * ```typescript\n * const info = getContractInfo(\"DataRegistry\" as const, 14800);\n * console.log(info.address); // Typed as Address\n * console.log(info.abi); // Fully typed ABI\n *\n * // Use with custom viem client\n * const contract = getContract({\n *   ...info,\n *   client: customClient\n * });\n * ```\n *\n * @category Contracts\n */\nexport function getContractInfo<T extends AddressedVanaContract>(\n  contract: T,\n  chainId: VanaChainId = vanaMainnet.id as VanaChainId,\n): ContractInfo<ContractAbis[T]> {\n  return {\n    address: getContractAddress(chainId, contract),\n    abi: getAbi(contract),\n  };\n}\n\n/**\n * Provides type-safe contract factory for creating multiple contract instances.\n *\n * @remarks\n * Alternative API for applications that need to create multiple contracts\n * with the same client. The factory pattern reduces boilerplate and ensures\n * consistent client configuration across contracts.\n *\n * @example\n * ```typescript\n * const factory = new ContractFactory(client);\n *\n * const dataRegistry = factory.create(\"DataRegistry\" as const);\n * const permissions = factory.create(\"DataPortabilityPermissions\" as const);\n *\n * // List available contracts\n * const contracts = factory.getAvailableContracts();\n * ```\n *\n * @category Contracts\n */\nexport class ContractFactory {\n  private readonly client:\n    | PublicClient\n    | WalletClient\n    | ReturnType<typeof createClient>;\n  private readonly chainId: number;\n\n  constructor(\n    client: PublicClient | WalletClient | ReturnType<typeof createClient>,\n  ) {\n    this.client = client;\n    try {\n      this.chainId = client.chain?.id ?? vanaMainnet.id;\n    } catch {\n      this.chainId = vanaMainnet.id;\n    }\n  }\n\n  /**\n   * Creates a typed contract instance\n   *\n   * @param contract - Contract name (use const assertion for full typing)\n   * @returns Fully typed contract instance\n   */\n  create<T extends AddressedVanaContract>(\n    contract: T,\n  ): GetContractReturnType<ContractAbis[T]> {\n    return getContractController(contract, this.client);\n  }\n\n  /**\n   * Gets contract information without creating an instance\n   *\n   * @param contract - Contract name\n   * @returns Contract information with typed ABI\n   */\n  getInfo<T extends AddressedVanaContract>(\n    contract: T,\n  ): ContractInfo<ContractAbis[T]> {\n    return getContractInfo(contract, this.chainId as VanaChainId);\n  }\n\n  /**\n   * Lists all available contracts for the current chain\n   *\n   * @returns Array of contract names available on this chain\n   */\n  getAvailableContracts(): AddressedVanaContract[] {\n    // Return contract names that have both an address and an ABI on this chain.\n    const chainAddresses = CONTRACT_ADDRESSES[this.chainId];\n    if (!chainAddresses) return [];\n\n    return Object.keys(chainAddresses).filter(\n      (contract): contract is AddressedVanaContract => {\n        try {\n          getAbi(contract as VanaContract);\n          return true;\n        } catch {\n          return false;\n        }\n      },\n    );\n  }\n}\n\n/**\n * Clears the contract cache. Useful for testing or when chain configurations change.\n *\n * @param contract - Optional specific contract to clear, or clear all if not provided\n * @param chainId - Optional specific chain to clear, or clear all if not provided\n */\nexport function clearContractCache(\n  contract?: AddressedVanaContract,\n  chainId?: number,\n): void {\n  if (contract && chainId) {\n    const cacheKey = createCacheKey(contract, chainId);\n    contractCache.delete(cacheKey);\n  } else if (contract) {\n    // Clear all instances of this contract across all chains\n    for (const key of contractCache.keys()) {\n      if (key.startsWith(`${contract}:`)) {\n        contractCache.delete(key);\n      }\n    }\n  } else if (chainId) {\n    // Clear all contracts for this chain\n    for (const key of contractCache.keys()) {\n      if (key.endsWith(`:${chainId}`)) {\n        contractCache.delete(key);\n      }\n    }\n  } else {\n    // Clear entire cache\n    contractCache.clear();\n  }\n}\n\n// Function is already exported above, no need for redundant export\n\n// Type-only exports for enhanced type safety\nexport type { GetContractReturnType } from \"viem\";\n", "// THIS FILE IS GENERATED, DO NOT EDIT MANUALLY\n// Run `npm run fetch-abis` to regenerate\n//\n// ComputeEngine Implementation Contract\n//\n// Generated: 2025-10-30T23:21:11.853Z\n// Network: Vana (Chain ID: 1480)\n//\n//   Proxy Address:\n//     0xb2BFe33FA420c45F1Cf1287542ad81ae935447bd\n//     https://vanascan.io/address/0xb2BFe33FA420c45F1Cf1287542ad81ae935447bd\n//\n//   Implementation Address:\n//     0x94454FD4ff111EE511336E023Ee3969E1f83ef36\n//     https://vanascan.io/address/0x94454FD4ff111EE511336E023Ee3969E1f83ef36\n\nexport const ComputeEngineABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressInsufficientBalance\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedToAssignTee\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"computeInstructionId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"InstructionNotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientBalance\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAmount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"enum IComputeEngine.JobStatus\",\n        name: \"currentStatus\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"enum IComputeEngine.JobStatus\",\n        name: \"newStatus\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"InvalidStatusTransition\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidVanaAmount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"JobAlreadyDone\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"JobLifeCycleEnded\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"JobNotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"JobNotSubmitted\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotJobOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotLongRunningJob\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotQueryEngine\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotTee\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"OnlyRegisteredJobStatus\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ReentrancyGuardReentrantCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"SafeERC20FailedOperation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"TeeAlreadyAssigned\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TeePoolNotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UnauthorizedPaymentRequestor\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UnexpectedVanaDeposit\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroTeeAddress\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Deposit\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"JobCanceled\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"JobRegistered\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"enum IComputeEngine.JobStatus\",\n        name: \"status\",\n        type: \"uint8\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"statusMessage\",\n        type: \"string\",\n      },\n    ],\n    name: \"JobStatusUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"PaymentExecuted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes\",\n        name: \"reason\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"TeeAssignmentFailed\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teePoolAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeAssignmentSucceeded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Withdraw\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEDICATED_TIMEOUT\",\n    outputs: [\n      {\n        internalType: \"uint80\",\n        name: \"\",\n        type: \"uint80\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"VANA\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"balanceOf\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"cancelJob\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"computeEngineTreasury\",\n    outputs: [\n      {\n        internalType: \"contract IDataAccessTreasury\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"deposit\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"metadata\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"executePaymentRequest\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initQueryEngine\",\n        type: \"address\",\n      },\n      {\n        internalType: \"contract IComputeEngineTeePoolFactory\",\n        name: \"initTeePoolFactory\",\n        type: \"address\",\n      },\n      {\n        internalType: \"contract DataAccessTreasuryProxyFactory\",\n        name: \"initDataAccessTreasuryFactory\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"instructionRegistry\",\n    outputs: [\n      {\n        internalType: \"contract IComputeInstructionRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"jobs\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint80\",\n            name: \"maxTimeout\",\n            type: \"uint80\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"gpuRequired\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"enum IComputeEngine.JobStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint32\",\n            name: \"computeInstructionId\",\n            type: \"uint32\",\n          },\n          {\n            internalType: \"uint48\",\n            name: \"addedTimestamp\",\n            type: \"uint48\",\n          },\n          {\n            internalType: \"string\",\n            name: \"statusMessage\",\n            type: \"string\",\n          },\n          {\n            internalType: \"address\",\n            name: \"teePoolAddress\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct IComputeEngine.Job\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"jobsCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"paymentInfo\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"queryEngine\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"resubmitJob\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"resubmitJobWithTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint80\",\n        name: \"maxTimeout\",\n        type: \"uint80\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"gpuRequired\",\n        type: \"bool\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"computeInstructionId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"submitJob\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint80\",\n        name: \"maxTimeout\",\n        type: \"uint80\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"gpuRequired\",\n        type: \"bool\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"computeInstructionId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"submitJobWithTee\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teePoolFactory\",\n    outputs: [\n      {\n        internalType: \"contract IComputeEngineTeePoolFactory\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"contract IDataAccessTreasury\",\n        name: \"newComputeEngineTreasuryAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateComputeEngineTreasury\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"contract IComputeInstructionRegistry\",\n        name: \"newInstructionRegistry\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateInstructionRegistry\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"enum IComputeEngine.JobStatus\",\n        name: \"status\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"string\",\n        name: \"statusMessage\",\n        type: \"string\",\n      },\n    ],\n    name: \"updateJobStatus\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newQueryEngineAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateQueryEngine\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"contract IComputeEngineTeePoolFactory\",\n        name: \"newTeePoolFactory\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTeePoolFactory\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"vanaPaymentInfo\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"withdraw\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nexport default ComputeEngineABI;\n", "// THIS FILE IS GENERATED, DO NOT EDIT MANUALLY\n// Run `npm run fetch-abis` to regenerate\n//\n// DataRegistry Implementation Contract\n//\n// Generated: 2025-10-30T23:21:11.412Z\n// Network: Vana (Chain ID: 1480)\n//\n//   Proxy Address:\n//     0x8C8788f98385F6ba1adD4234e551ABba0f82Cb7C\n//     https://vanascan.io/address/0x8C8788f98385F6ba1adD4234e551ABba0f82Cb7C\n//\n//   Implementation Address:\n//     0x0F3538367A7aab9E30Fbf289655585aB58560042\n//     https://vanascan.io/address/0x0F3538367A7aab9E30Fbf289655585aB58560042\n\nexport const DataRegistryABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FileNotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FileUrlAlreadyUsed\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"schemaId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"InvalidSchemaId\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidUrl\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NoPermission\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotFileOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n    ],\n    name: \"FileAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"schemaId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"FileAddedV2\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"PermissionGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"proofIndex\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"score\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"proofUrl\",\n        type: \"string\",\n      },\n    ],\n    name: \"ProofAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n    ],\n    name: \"RefinementAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n    ],\n    name: \"RefinementUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DATA_PORTABILITY_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"REFINEMENT_SERVICE_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n    ],\n    name: \"addFile\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"key\",\n        type: \"string\",\n      },\n    ],\n    name: \"addFilePermission\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"account\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"key\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IDataRegistry.Permission[]\",\n        name: \"permissions\",\n        type: \"tuple[]\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"schemaId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"addFilePermissionsAndSchema\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"account\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"key\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IDataRegistry.Permission[]\",\n        name: \"permissions\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"addFileWithPermissions\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"account\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"key\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IDataRegistry.Permission[]\",\n        name: \"permissions\",\n        type: \"tuple[]\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"schemaId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"addFileWithPermissionsAndSchema\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"schemaId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"addFileWithSchema\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        components: [\n          {\n            internalType: \"bytes\",\n            name: \"signature\",\n            type: \"bytes\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint256\",\n                name: \"score\",\n                type: \"uint256\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"dlpId\",\n                type: \"uint256\",\n              },\n              {\n                internalType: \"string\",\n                name: \"metadata\",\n                type: \"string\",\n              },\n              {\n                internalType: \"string\",\n                name: \"proofUrl\",\n                type: \"string\",\n              },\n              {\n                internalType: \"string\",\n                name: \"instruction\",\n                type: \"string\",\n              },\n            ],\n            internalType: \"struct IDataRegistry.ProofData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct IDataRegistry.Proof\",\n        name: \"proof\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"addProof\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"key\",\n        type: \"string\",\n      },\n    ],\n    name: \"addRefinementWithPermission\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dataRefinerRegistry\",\n    outputs: [\n      {\n        internalType: \"contract IDataRefinerRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"emitLegacyEvents\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n    ],\n    name: \"fileIdByUrl\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"filePermissions\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"fileProofs\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes\",\n            name: \"signature\",\n            type: \"bytes\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint256\",\n                name: \"score\",\n                type: \"uint256\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"dlpId\",\n                type: \"uint256\",\n              },\n              {\n                internalType: \"string\",\n                name: \"metadata\",\n                type: \"string\",\n              },\n              {\n                internalType: \"string\",\n                name: \"proofUrl\",\n                type: \"string\",\n              },\n              {\n                internalType: \"string\",\n                name: \"instruction\",\n                type: \"string\",\n              },\n            ],\n            internalType: \"struct IDataRegistry.ProofData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct IDataRegistry.Proof\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"fileRefinements\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"files\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"id\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"schemaId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"addedAtBlock\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDataRegistry.FileResponse\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"filesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"trustedForwarderAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"forwarder\",\n        type: \"address\",\n      },\n    ],\n    name: \"isTrustedForwarder\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes[]\",\n        name: \"data\",\n        type: \"bytes[]\",\n      },\n    ],\n    name: \"multicall\",\n    outputs: [\n      {\n        internalType: \"bytes[]\",\n        name: \"results\",\n        type: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"adminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"setRoleAdmin\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"trustedForwarder\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"contract IDataRefinerRegistry\",\n        name: \"newDataRefinerRegistry\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateDataRefinerRegistry\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bool\",\n        name: \"newEmitLegacyEvents\",\n        type: \"bool\",\n      },\n    ],\n    name: \"updateEmitLegacyEvents\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"trustedForwarderAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTrustedForwarder\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default DataRegistryABI;\n", "// THIS FILE IS GENERATED, DO NOT EDIT MANUALLY\n// Run `npm run fetch-abis` to regenerate\n//\n// TeePoolPhala Implementation Contract\n//\n// Generated: 2025-10-30T23:21:13.377Z\n// Network: Vana (Chain ID: 1480)\n//\n//   Proxy Address:\n//     0xE8EC6BD73b23Ad40E6B9a6f4bD343FAc411bD99A\n//     https://vanascan.io/address/0xE8EC6BD73b23Ad40E6B9a6f4bD343FAc411bD99A\n//\n//   Implementation Address:\n//     0x25BbA03174B340522f679cC18019C0db241A8a70\n//     https://vanascan.io/address/0x25BbA03174B340522f679cC18019C0db241A8a70\n\nexport const TeePoolPhalaABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"CancelDelayNotPassed\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientFee\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidJobStatus\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidJobTee\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"JobCompleted\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NoActiveTee\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotJobOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NothingToClaim\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ReentrancyGuardReentrantCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TeeAlreadyAdded\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TeeNotActive\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TransferFailed\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Claimed\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"JobCanceled\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"bidAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"JobSubmitted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"attestator\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ProofAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeRemoved\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"activeTeeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum ITeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"withdrawnAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct ITeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        components: [\n          {\n            internalType: \"bytes\",\n            name: \"signature\",\n            type: \"bytes\",\n          },\n          {\n            components: [\n              {\n                internalType: \"uint256\",\n                name: \"score\",\n                type: \"uint256\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"dlpId\",\n                type: \"uint256\",\n              },\n              {\n                internalType: \"string\",\n                name: \"metadata\",\n                type: \"string\",\n              },\n              {\n                internalType: \"string\",\n                name: \"proofUrl\",\n                type: \"string\",\n              },\n              {\n                internalType: \"string\",\n                name: \"instruction\",\n                type: \"string\",\n              },\n            ],\n            internalType: \"struct IDataRegistry.ProofData\",\n            name: \"data\",\n            type: \"tuple\",\n          },\n        ],\n        internalType: \"struct IDataRegistry.Proof\",\n        name: \"proof\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"addProof\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"publicKey\",\n        type: \"string\",\n      },\n    ],\n    name: \"addTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"cancelDelay\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"cancelJob\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"claim\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dataRegistry\",\n    outputs: [\n      {\n        internalType: \"contract IDataRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"fileJobIds\",\n    outputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"trustedForwarderAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"dataRegistryAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"initialCancelDelay\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"isTee\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"forwarder\",\n        type: \"address\",\n      },\n    ],\n    name: \"isTrustedForwarder\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"jobs\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"fileId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"bidAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"enum ITeePool.JobStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"addedTimestamp\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct ITeePool.Job\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"jobsCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes[]\",\n        name: \"data\",\n        type: \"bytes[]\",\n      },\n    ],\n    name: \"multicall\",\n    outputs: [\n      {\n        internalType: \"bytes[]\",\n        name: \"results\",\n        type: \"bytes[]\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"removeTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"requestContributionProof\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"fileId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"submitJob\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teeFee\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"start\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"limit\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"teeJobIdsPaginated\",\n    outputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"teeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum ITeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"withdrawnAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct ITeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"tees\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum ITeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"amount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"withdrawnAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct ITeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"trustedForwarder\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newCancelDelay\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateCancelDelay\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"contract IDataRegistry\",\n        name: \"newDataRegistry\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateDataRegistry\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newTeeFee\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateTeeFee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"trustedForwarderAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTrustedForwarder\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default TeePoolPhalaABI;\n", "// THIS FILE IS GENERATED, DO NOT EDIT MANUALLY\n// Run `npm run fetch-abis` to regenerate\n//\n// DataPortabilityPermissions Implementation Contract\n//\n// Generated: 2026-08-28T19:59:08.996Z\n// Network: Vana (Chain ID: 1480)\n//\n//   Proxy Address:\n//     0x4d3FA76064D88e0454cFc4CaD7e5FeC3e3124011\n//     https://vanascan.io/address/0x4d3FA76064D88e0454cFc4CaD7e5FeC3e3124011\n//\n//   Implementation Address:\n//     0x4E71094c8cd2065F1C0C85e978d7f53B79B1AA84\n//     https://vanascan.io/address/0x4E71094c8cd2065F1C0C85e978d7f53B79B1AA84\n\nexport const DataPortabilityPermissionsABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ECDSAInvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"s\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureS\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EmptyScopes\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"claimed\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"actual\",\n        type: \"address\",\n      },\n    ],\n    name: \"GrantorMismatch\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"currentVersion\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"providedVersion\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"InvalidGrantVersion\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroGranteeId\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"previous\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"current\",\n        type: \"address\",\n      },\n    ],\n    name: \"DataPortabilityServersUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"id\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"grantorAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"granteeId\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: false,\n        internalType: \"string[]\",\n        name: \"scopes\",\n        type: \"string[]\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"grantVersion\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"expiresAt\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"PermissionSet\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"id\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"grantorAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"delegate\",\n        type: \"address\",\n      },\n    ],\n    name: \"PermissionSignedByDelegate\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"GRANT_REGISTRATION_TYPEHASH\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"grantorAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"granteeId\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"string[]\",\n            name: \"scopes\",\n            type: \"string[]\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"grantVersion\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"expiresAt\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDataPortabilityPermissionsV2.AddPermissionInput\",\n        name: \"input\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"addPermission\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"grantorAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"granteeId\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"string[]\",\n            name: \"scopes\",\n            type: \"string[]\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"grantVersion\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"expiresAt\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDataPortabilityPermissionsV2.AddPermissionInput\",\n        name: \"input\",\n        type: \"tuple\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"signature\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"addPermissionWithSignature\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dataPortabilityServers\",\n    outputs: [\n      {\n        internalType: \"contract IDataPortabilityServersV2\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"domainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"grantorAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"granteeId\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"grantId\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"id\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"isActive\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"id\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"permissions\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"grantorAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"granteeId\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"string[]\",\n            name: \"scopes\",\n            type: \"string[]\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"grantVersion\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"expiresAt\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDataPortabilityPermissionsV2.Permission\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newDataPortabilityServers\",\n        type: \"address\",\n      },\n    ],\n    name: \"setDataPortabilityServers\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default DataPortabilityPermissionsABI;\n", "// THIS FILE IS GENERATED, DO NOT EDIT MANUALLY\n// Run `npm run fetch-abis` to regenerate\n//\n// DataPortabilityServers Implementation Contract\n//\n// Generated: 2026-08-28T19:59:10.373Z\n// Network: Vana (Chain ID: 1480)\n//\n//   Proxy Address:\n//     0xCae2CE0e9caa6643ed28186cF57bd40Bd9E17Eab\n//     https://vanascan.io/address/0xCae2CE0e9caa6643ed28186cF57bd40Bd9E17Eab\n//\n//   Implementation Address:\n//     0x97537454751eE1A649C92Ac1BA7D0E4a9E90D1fd\n//     https://vanascan.io/address/0x97537454751eE1A649C92Ac1BA7D0E4a9E90D1fd\n\nexport const DataPortabilityServersABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"serverId\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AlreadyRevoked\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"deadline\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"currentTime\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"DeadlineExpired\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ECDSAInvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"s\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureS\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EmptyPublicKey\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EmptyUrl\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"serverId\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"claimed\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"actual\",\n        type: \"address\",\n      },\n    ],\n    name: \"NotServerOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"claimed\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recovered\",\n        type: \"address\",\n      },\n    ],\n    name: \"OwnerMismatch\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"serverAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"ServerAlreadyRegistered\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"serverId\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"ServerNotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"expected\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"provided\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"StaleServerId\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAddress\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"serverId\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"serverAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"ServerDeregistered\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"serverId\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"serverAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"publicKey\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"serverUrl\",\n        type: \"string\",\n      },\n    ],\n    name: \"ServerRegistered\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"SERVER_DEREGISTRATION_TYPEHASH\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"SERVER_REGISTRATION_TYPEHASH\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"serverAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"activeServerId\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"serverAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"publicKey\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"serverUrl\",\n        type: \"string\",\n      },\n    ],\n    name: \"computeServerId\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"serverAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"serverId\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"deadline\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDataPortabilityServersV2.ServerDeregistration\",\n        name: \"input\",\n        type: \"tuple\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"signature\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"deregisterServerWithSignature\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"domainSeparator\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"serverAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"getActiveServerByAddress\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"id\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"serverAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"serverUrl\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"registeredAtBlock\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"revokedAtBlock\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDataPortabilityServersV2.ServerInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"serverId\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getServer\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"id\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"serverAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"serverUrl\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"registeredAtBlock\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"revokedAtBlock\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDataPortabilityServersV2.ServerInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"trustedForwarderAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"forwarder\",\n        type: \"address\",\n      },\n    ],\n    name: \"isTrustedForwarder\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"ownerServers\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"id\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"serverAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"serverUrl\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"registeredAtBlock\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"revokedAtBlock\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDataPortabilityServersV2.ServerInfo[]\",\n        name: \"\",\n        type: \"tuple[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"serverAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"serverUrl\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IDataPortabilityServersV2.ServerRegistration\",\n        name: \"input\",\n        type: \"tuple\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"signature\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"registerServerWithSignature\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"serverId\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"serversCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"trustedForwarder\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"trustedForwarderAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTrustedForwarder\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default DataPortabilityServersABI;\n", "// THIS FILE IS GENERATED, DO NOT EDIT MANUALLY\n// Run `npm run fetch-abis` to regenerate\n//\n// DataPortabilityGrantees Implementation Contract\n//\n// Generated: 2025-10-30T23:21:11.005Z\n// Network: Vana (Chain ID: 1480)\n//\n//   Proxy Address:\n//     0x8325C0A0948483EdA023A1A2Fd895e62C5131234\n//     https://vanascan.io/address/0x8325C0A0948483EdA023A1A2Fd895e62C5131234\n//\n//   Implementation Address:\n//     0x53A4e13caF2EbC03224981B6f22644A720f74166\n//     https://vanascan.io/address/0x53A4e13caF2EbC03224981B6f22644A720f74166\n\nexport const DataPortabilityGranteesABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EmptyPublicKey\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"GranteeAlreadyRegistered\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"GranteeNotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UnauthorizedRegistration\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAddress\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"granteeId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"granteeAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"publicKey\",\n        type: \"string\",\n      },\n    ],\n    name: \"GranteeRegistered\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"PERMISSION_MANAGER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"granteeId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"permissionId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"addPermissionToGrantee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"granteeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"granteeAddressToId\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"granteeId\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"granteeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"granteeByAddress\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"owner\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"granteeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256[]\",\n            name: \"permissionIds\",\n            type: \"uint256[]\",\n          },\n        ],\n        internalType: \"struct IDataPortabilityGrantees.GranteeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"granteeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"granteeByAddressV2\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"owner\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"granteeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"permissionsCount\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDataPortabilityGrantees.GranteeInfoV2\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"granteeId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"granteeInfo\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"owner\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"granteeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256[]\",\n            name: \"permissionIds\",\n            type: \"uint256[]\",\n          },\n        ],\n        internalType: \"struct IDataPortabilityGrantees.GranteeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"granteeId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"granteeInfoV2\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"owner\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"granteeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"permissionsCount\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDataPortabilityGrantees.GranteeInfoV2\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"granteeId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"granteePermissionIds\",\n    outputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"granteeId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"granteePermissions\",\n    outputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"granteeId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"offset\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"limit\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"granteePermissionsPaginated\",\n    outputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"permissionIds\",\n        type: \"uint256[]\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"totalCount\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"hasMore\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"granteeId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"grantees\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"owner\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"granteeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256[]\",\n            name: \"permissionIds\",\n            type: \"uint256[]\",\n          },\n        ],\n        internalType: \"struct IDataPortabilityGrantees.GranteeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"granteesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"granteeId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"granteesV2\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"owner\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"granteeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"permissionsCount\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDataPortabilityGrantees.GranteeInfoV2\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"trustedForwarderAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"forwarder\",\n        type: \"address\",\n      },\n    ],\n    name: \"isTrustedForwarder\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"granteeAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"publicKey\",\n        type: \"string\",\n      },\n    ],\n    name: \"registerGrantee\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"granteeId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"permissionId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"removePermissionFromGrantee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"adminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"setRoleAdmin\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"trustedForwarder\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"trustedForwarderAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTrustedForwarder\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n] as const;\n\nexport default DataPortabilityGranteesABI;\n", "// THIS FILE IS GENERATED, DO NOT EDIT MANUALLY\n// Run `npm run fetch-abis` to regenerate\n//\n// DataRefinerRegistry Implementation Contract\n//\n// Generated: 2025-10-30T23:21:12.604Z\n// Network: Vana (Chain ID: 1480)\n//\n//   Proxy Address:\n//     0x93c3EF89369fDcf08Be159D9DeF0F18AB6Be008c\n//     https://vanascan.io/address/0x93c3EF89369fDcf08Be159D9DeF0F18AB6Be008c\n//\n//   Implementation Address:\n//     0x8284aF2C85Abe6B6D2D8D61e4E7381B5dBDe5520\n//     https://vanascan.io/address/0x8284aF2C85Abe6B6D2D8D61e4E7381B5dBDe5520\n\nexport const DataRefinerRegistryABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"schemaId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"InvalidSchemaId\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotDlpOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"schemaId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"schemaDefinitionUrl\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"refinementInstructionUrl\",\n        type: \"string\",\n      },\n    ],\n    name: \"RefinerAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"schemaId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"dialect\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"definitionUrl\",\n        type: \"string\",\n      },\n    ],\n    name: \"SchemaAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"refinementService\",\n        type: \"address\",\n      },\n    ],\n    name: \"addRefinementService\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"schemaDefinitionUrl\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"refinementInstructionUrl\",\n        type: \"string\",\n      },\n    ],\n    name: \"addRefiner\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"schemaId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"string\",\n        name: \"refinementInstructionUrl\",\n        type: \"string\",\n      },\n    ],\n    name: \"addRefinerWithSchemaId\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"dialect\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"definitionUrl\",\n        type: \"string\",\n      },\n    ],\n    name: \"addSchema\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"dlpRefinementServices\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"dlpRefiners\",\n    outputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dlpRegistry\",\n    outputs: [\n      {\n        internalType: \"contract IDLPRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initDlpRegistryAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"refinementService\",\n        type: \"address\",\n      },\n    ],\n    name: \"isRefinementService\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"schemaId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"isValidSchemaId\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"refiners\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"dlpId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"owner\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"name\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"schemaDefinitionUrl\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"refinementInstructionUrl\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"schemaId\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDataRefinerRegistry.RefinerInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"refinersCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"refinementService\",\n        type: \"address\",\n      },\n    ],\n    name: \"removeRefinementService\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"schemaId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"schemas\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"string\",\n            name: \"name\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"dialect\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"definitionUrl\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IDataRefinerRegistry.Schema\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"schemasCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateDlpRefinersOwner\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newDlpRegistryAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateDlpRegistry\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateRefinerOwner\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"newSchemaId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateSchemaId\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default DataRefinerRegistryABI;\n", "// THIS FILE IS GENERATED, DO NOT EDIT MANUALLY\n// Run `npm run fetch-abis` to regenerate\n//\n// QueryEngine Implementation Contract\n//\n// Generated: 2025-10-30T23:21:12.242Z\n// Network: Vana (Chain ID: 1480)\n//\n//   Proxy Address:\n//     0xd25Eb66EA2452cf3238A2eC6C1FD1B7F5B320490\n//     https://vanascan.io/address/0xd25Eb66EA2452cf3238A2eC6C1FD1B7F5B320490\n//\n//   Implementation Address:\n//     0x0ff5D8D496ea05E65742c5623f17aAc8e3fd9C9b\n//     https://vanascan.io/address/0x0ff5D8D496ea05E65742c5623f17aAc8e3fd9C9b\n\nexport const QueryEngineABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressInsufficientBalance\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ColumnNameUnexpected\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DlpNotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidDlpPaymentPercentage\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidDlpTreasuryAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"InvalidPaymentToken\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotDlpOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotRefinerOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"PaymentNotReceived\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"PermissionNotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ReentrancyGuardReentrantCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"RefinerNotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"SafeERC20FailedOperation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"TokenAlreadyWhitelisted\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAddress\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"dlpTreasuryAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"DlpPaymentClaimed\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"PaymentReceived\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"permissionId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"grantee\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"tableName\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"columnName\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"tokenAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"price\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"PermissionAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"permissionId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"bool\",\n        name: \"approved\",\n        type: \"bool\",\n      },\n    ],\n    name: \"PermissionApprovalUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"ONE_HUNDRED_PERCENT\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"QUERY_ENGINE_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"VANA\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"string\",\n        name: \"tableName\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"columnName\",\n        type: \"string\",\n      },\n      {\n        internalType: \"address\",\n        name: \"tokenAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"price\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"addGenericPermission\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"permissionId\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"addPaymentToken\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"grantee\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"string\",\n        name: \"tableName\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"columnName\",\n        type: \"string\",\n      },\n      {\n        internalType: \"address\",\n        name: \"tokenAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"price\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"addPermission\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"permissionId\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"balanceOf\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"claimDlpPayment\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"computeEngine\",\n    outputs: [\n      {\n        internalType: \"contract IComputeEngine\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dlpPaymentPercentage\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"dlpPubKeys\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"pubKey\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"grantee\",\n        type: \"address\",\n      },\n    ],\n    name: \"getPermissions\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"permissionId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"grantee\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"approved\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"refinerId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"tableName\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"columnName\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"price\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"tokenAddress\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct IQueryEngine.PermissionInfo[]\",\n        name: \"\",\n        type: \"tuple[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initRefinerRegistryAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"contract DataAccessTreasuryProxyFactory\",\n        name: \"initDataAccessTreasuryFactory\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"permissionId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"permissions\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"grantee\",\n            type: \"address\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"approved\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"refinerId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"tableName\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"columnName\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"price\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"tokenAddress\",\n            type: \"address\",\n          },\n        ],\n        internalType: \"struct IQueryEngine.Permission\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"permissionsCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"queryEngineTreasury\",\n    outputs: [\n      {\n        internalType: \"contract IDataAccessTreasury\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"refinerRegistry\",\n    outputs: [\n      {\n        internalType: \"contract IDataRefinerRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"removePaymentToken\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"metadata\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"requestPayment\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"requestPaymentInToken\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"refinerId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"requestPaymentInVana\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newComputeEngineAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateComputeEngine\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newDlpPaymentPercentage\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateDlpPaymentPercentage\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"string\",\n        name: \"pubKey\",\n        type: \"string\",\n      },\n    ],\n    name: \"updateDlpPubKey\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"permissionId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"approved\",\n        type: \"bool\",\n      },\n    ],\n    name: \"updatePermissionApproval\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"contract IDataAccessTreasury\",\n        name: \"newQueryEngineTreasury\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateQueryEngineTreasury\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newRefinerRegistryAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateRefinerRegistry\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newVanaTreasury\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateVanaTreasury\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"vanaTreasury\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    stateMutability: \"payable\",\n    type: \"receive\",\n  },\n] as const;\n\nexport default QueryEngineABI;\n", "// THIS FILE IS GENERATED, DO NOT EDIT MANUALLY\n// Run `npm run fetch-abis` to regenerate\n//\n// ComputeInstructionRegistry Implementation Contract\n//\n// Generated: 2025-10-30T23:21:12.955Z\n// Network: Vana (Chain ID: 1480)\n//\n//   Proxy Address:\n//     0x5786B12b4c6Ba2bFAF0e77Ed30Bf6d32805563A5\n//     https://vanascan.io/address/0x5786B12b4c6Ba2bFAF0e77Ed30Bf6d32805563A5\n//\n//   Implementation Address:\n//     0x6E828824c0308E225080c186662ff3fF951633f4\n//     https://vanascan.io/address/0x6E828824c0308E225080c186662ff3fF951633f4\n\nexport const ComputeInstructionRegistryABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"instructionId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ComputeInstructionNotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotDlpOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"computeInstructionId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"computeInstructionUrl\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"bytes32\",\n        name: \"computeInstructionHash\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"ComputeInstructionAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"computeInstructionId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"bool\",\n        name: \"approved\",\n        type: \"bool\",\n      },\n    ],\n    name: \"ComputeInstructionUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"hash\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n    ],\n    name: \"addComputeInstruction\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"computeInstructionId\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dlpRegistry\",\n    outputs: [\n      {\n        internalType: \"contract IDLPRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initDlpRegistryAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"instructionId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"instructions\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bytes32\",\n            name: \"hash\",\n            type: \"bytes32\",\n          },\n          {\n            internalType: \"address\",\n            name: \"owner\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n        ],\n        internalType:\n          \"struct IComputeInstructionRegistry.ComputeInstructionInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"instructionsCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"instructionId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"isApproved\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"instructionId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"isValidInstructionId\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"instructionId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"approved\",\n        type: \"bool\",\n      },\n    ],\n    name: \"updateComputeInstruction\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newDlpRegistryAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateDlpRegistry\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default ComputeInstructionRegistryABI;\n", "// THIS FILE IS GENERATED, DO NOT EDIT MANUALLY\n// Run `npm run fetch-abis` to regenerate\n//\n// TeePoolEphemeralStandard Implementation Contract\n//\n// Generated: 2025-10-30T23:21:13.887Z\n// Network: Vana (Chain ID: 1480)\n//\n//   Proxy Address:\n//     0xe124bae846D5ec157f75Bd9e68ca87C4d2AB835A\n//     https://vanascan.io/address/0xe124bae846D5ec157f75Bd9e68ca87C4d2AB835A\n//\n//   Implementation Address:\n//     0x018BA147EA747b4c0299a23c5fd05f72180A83f8\n//     https://vanascan.io/address/0x018BA147EA747b4c0299a23c5fd05f72180A83f8\n\nexport const TeePoolEphemeralStandardABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"HWRequirementNotMet\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"MaxTimeoutExceeded\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teePoolAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"NoActiveTee\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotComputeEngine\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotTeePoolFactory\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TeeAlreadyAdded\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeNotActive\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"newHardwareType\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"HardwareTypeUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"JobRemoved\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"JobSubmitted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"publicKey\",\n        type: \"string\",\n      },\n    ],\n    name: \"TeeAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"newTeePoolType\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"TeePoolTypeUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeRemoved\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"activeTeeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"params\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"addTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"computeEngine\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"hardwareType\",\n    outputs: [\n      {\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initComputeEngine\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initTeePoolFactory\",\n        type: \"address\",\n      },\n      {\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"initTeePoolType\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"initHardwareType\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"uint80\",\n        name: \"initMaxTimeout\",\n        type: \"uint80\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"isTee\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"maxTimeout\",\n    outputs: [\n      {\n        internalType: \"uint80\",\n        name: \"\",\n        type: \"uint80\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"removeJob\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"removeTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes\",\n        name: \"params\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"submitJob\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"\",\n        type: \"bytes\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"teeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teePoolFactory\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teePoolType\",\n    outputs: [\n      {\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"tees\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newComputeEngine\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateComputeEngine\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint80\",\n        name: \"newMaxTimeout\",\n        type: \"uint80\",\n      },\n    ],\n    name: \"updateMaxTimeout\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newTeePoolFactory\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTeePoolFactory\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default TeePoolEphemeralStandardABI;\n", "// THIS FILE IS GENERATED, DO NOT EDIT MANUALLY\n// Run `npm run fetch-abis` to regenerate\n//\n// TeePoolPersistentStandard Implementation Contract\n//\n// Generated: 2025-10-30T23:21:14.352Z\n// Network: Vana (Chain ID: 1480)\n//\n//   Proxy Address:\n//     0xe8bB8d0629651Cf33e0845d743976Dc1f0971d76\n//     https://vanascan.io/address/0xe8bB8d0629651Cf33e0845d743976Dc1f0971d76\n//\n//   Implementation Address:\n//     0x018BA147EA747b4c0299a23c5fd05f72180A83f8\n//     https://vanascan.io/address/0x018BA147EA747b4c0299a23c5fd05f72180A83f8\n\nexport const TeePoolPersistentStandardABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"HWRequirementNotMet\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"MaxTimeoutExceeded\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teePoolAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"NoActiveTee\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotComputeEngine\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotTeePoolFactory\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TeeAlreadyAdded\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeNotActive\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"newHardwareType\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"HardwareTypeUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"JobRemoved\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"JobSubmitted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"publicKey\",\n        type: \"string\",\n      },\n    ],\n    name: \"TeeAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"newTeePoolType\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"TeePoolTypeUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeRemoved\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"activeTeeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"params\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"addTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"computeEngine\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"hardwareType\",\n    outputs: [\n      {\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initComputeEngine\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initTeePoolFactory\",\n        type: \"address\",\n      },\n      {\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"initTeePoolType\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"initHardwareType\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"uint80\",\n        name: \"initMaxTimeout\",\n        type: \"uint80\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"isTee\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"maxTimeout\",\n    outputs: [\n      {\n        internalType: \"uint80\",\n        name: \"\",\n        type: \"uint80\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"removeJob\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"removeTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes\",\n        name: \"params\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"submitJob\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"\",\n        type: \"bytes\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"teeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teePoolFactory\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teePoolType\",\n    outputs: [\n      {\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"tees\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newComputeEngine\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateComputeEngine\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint80\",\n        name: \"newMaxTimeout\",\n        type: \"uint80\",\n      },\n    ],\n    name: \"updateMaxTimeout\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newTeePoolFactory\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTeePoolFactory\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default TeePoolPersistentStandardABI;\n", "// THIS FILE IS GENERATED, DO NOT EDIT MANUALLY\n// Run `npm run fetch-abis` to regenerate\n//\n// TeePoolPersistentGpu Implementation Contract\n//\n// Generated: 2025-10-30T23:21:14.935Z\n// Network: Vana (Chain ID: 1480)\n//\n//   Proxy Address:\n//     0x1c346Cd74f8551f8fa13f3F4b6b8dAE22338E6a9\n//     https://vanascan.io/address/0x1c346Cd74f8551f8fa13f3F4b6b8dAE22338E6a9\n//\n//   Implementation Address:\n//     0x018BA147EA747b4c0299a23c5fd05f72180A83f8\n//     https://vanascan.io/address/0x018BA147EA747b4c0299a23c5fd05f72180A83f8\n\nexport const TeePoolPersistentGpuABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"HWRequirementNotMet\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"MaxTimeoutExceeded\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teePoolAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"NoActiveTee\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotComputeEngine\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotTeePoolFactory\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TeeAlreadyAdded\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeNotActive\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"newHardwareType\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"HardwareTypeUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"JobRemoved\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"JobSubmitted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"publicKey\",\n        type: \"string\",\n      },\n    ],\n    name: \"TeeAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"newTeePoolType\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"TeePoolTypeUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeRemoved\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"activeTeeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"params\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"addTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"computeEngine\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"hardwareType\",\n    outputs: [\n      {\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initComputeEngine\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initTeePoolFactory\",\n        type: \"address\",\n      },\n      {\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"initTeePoolType\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"initHardwareType\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"uint80\",\n        name: \"initMaxTimeout\",\n        type: \"uint80\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"isTee\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"maxTimeout\",\n    outputs: [\n      {\n        internalType: \"uint80\",\n        name: \"\",\n        type: \"uint80\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"removeJob\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"removeTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes\",\n        name: \"params\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"submitJob\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"\",\n        type: \"bytes\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"teeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teePoolFactory\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teePoolType\",\n    outputs: [\n      {\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"tees\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newComputeEngine\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateComputeEngine\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint80\",\n        name: \"newMaxTimeout\",\n        type: \"uint80\",\n      },\n    ],\n    name: \"updateMaxTimeout\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newTeePoolFactory\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTeePoolFactory\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default TeePoolPersistentGpuABI;\n", "// THIS FILE IS GENERATED, DO NOT EDIT MANUALLY\n// Run `npm run fetch-abis` to regenerate\n//\n// TeePoolDedicatedStandard Implementation Contract\n//\n// Generated: 2025-10-30T23:21:15.439Z\n// Network: Vana (Chain ID: 1480)\n//\n//   Proxy Address:\n//     0xf024b7ac5E8417416f53B41ecfa58C8e9396687d\n//     https://vanascan.io/address/0xf024b7ac5E8417416f53B41ecfa58C8e9396687d\n//\n//   Implementation Address:\n//     0x018BA147EA747b4c0299a23c5fd05f72180A83f8\n//     https://vanascan.io/address/0x018BA147EA747b4c0299a23c5fd05f72180A83f8\n\nexport const TeePoolDedicatedStandardABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"HWRequirementNotMet\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"MaxTimeoutExceeded\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teePoolAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"NoActiveTee\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotComputeEngine\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotTeePoolFactory\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TeeAlreadyAdded\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeNotActive\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"newHardwareType\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"HardwareTypeUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"JobRemoved\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"JobSubmitted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"publicKey\",\n        type: \"string\",\n      },\n    ],\n    name: \"TeeAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"newTeePoolType\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"TeePoolTypeUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeRemoved\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"activeTeeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"params\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"addTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"computeEngine\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"hardwareType\",\n    outputs: [\n      {\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initComputeEngine\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initTeePoolFactory\",\n        type: \"address\",\n      },\n      {\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"initTeePoolType\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"initHardwareType\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"uint80\",\n        name: \"initMaxTimeout\",\n        type: \"uint80\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"isTee\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"maxTimeout\",\n    outputs: [\n      {\n        internalType: \"uint80\",\n        name: \"\",\n        type: \"uint80\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"removeJob\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"removeTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes\",\n        name: \"params\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"submitJob\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"\",\n        type: \"bytes\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"teeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teePoolFactory\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teePoolType\",\n    outputs: [\n      {\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"tees\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newComputeEngine\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateComputeEngine\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint80\",\n        name: \"newMaxTimeout\",\n        type: \"uint80\",\n      },\n    ],\n    name: \"updateMaxTimeout\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newTeePoolFactory\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTeePoolFactory\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default TeePoolDedicatedStandardABI;\n", "// THIS FILE IS GENERATED, DO NOT EDIT MANUALLY\n// Run `npm run fetch-abis` to regenerate\n//\n// TeePoolDedicatedGpu Implementation Contract\n//\n// Generated: 2025-10-30T23:21:15.874Z\n// Network: Vana (Chain ID: 1480)\n//\n//   Proxy Address:\n//     0xB1686FA9620bBf851714d1cB47b8a4Bf4664644E\n//     https://vanascan.io/address/0xB1686FA9620bBf851714d1cB47b8a4Bf4664644E\n//\n//   Implementation Address:\n//     0x018BA147EA747b4c0299a23c5fd05f72180A83f8\n//     https://vanascan.io/address/0x018BA147EA747b4c0299a23c5fd05f72180A83f8\n\nexport const TeePoolDedicatedGpuABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"HWRequirementNotMet\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"MaxTimeoutExceeded\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teePoolAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"NoActiveTee\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotComputeEngine\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotTeePoolFactory\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TeeAlreadyAdded\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeNotActive\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"newHardwareType\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"HardwareTypeUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"JobRemoved\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"JobSubmitted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"url\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"publicKey\",\n        type: \"string\",\n      },\n    ],\n    name: \"TeeAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"newTeePoolType\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"TeePoolTypeUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"TeeRemoved\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"activeTeeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeTeesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"params\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"addTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"computeEngine\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"hardwareType\",\n    outputs: [\n      {\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initComputeEngine\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initTeePoolFactory\",\n        type: \"address\",\n      },\n      {\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"initTeePoolType\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"enum IComputeEngineTeePool.HardwareType\",\n        name: \"initHardwareType\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"uint80\",\n        name: \"initMaxTimeout\",\n        type: \"uint80\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"isTee\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"maxTimeout\",\n    outputs: [\n      {\n        internalType: \"uint80\",\n        name: \"\",\n        type: \"uint80\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"jobId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"removeJob\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"removeTee\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes\",\n        name: \"params\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"submitJob\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"\",\n        type: \"bytes\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teeList\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"teeListAt\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teePoolFactory\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teePoolType\",\n    outputs: [\n      {\n        internalType: \"enum IComputeEngineTeePool.TeePoolType\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"teeAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"tees\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"teeAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"url\",\n            type: \"string\",\n          },\n          {\n            internalType: \"enum IComputeEngineTeePool.TeeStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"jobsCount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"string\",\n            name: \"publicKey\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IComputeEngineTeePool.TeeInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"teesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newComputeEngine\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateComputeEngine\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint80\",\n        name: \"newMaxTimeout\",\n        type: \"uint80\",\n      },\n    ],\n    name: \"updateMaxTimeout\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newTeePoolFactory\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTeePoolFactory\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default TeePoolDedicatedGpuABI;\n", "// THIS FILE IS GENERATED, DO NOT EDIT MANUALLY\n// Run `npm run fetch-abis` to regenerate\n//\n// VanaEpoch Implementation Contract\n//\n// Generated: 2025-10-30T23:21:16.335Z\n// Network: Vana (Chain ID: 1480)\n//\n//   Proxy Address:\n//     0x2063cFF0609D59bCCc196E20Eb58A8696a6b15A0\n//     https://vanascan.io/address/0x2063cFF0609D59bCCc196E20Eb58A8696a6b15A0\n//\n//   Implementation Address:\n//     0x4642bB0ae9A11c2aFBd858cCEFd3b60C59Efca11\n//     https://vanascan.io/address/0x4642bB0ae9A11c2aFBd858cCEFd3b60C59Efca11\n\nexport const VanaEpochABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EpochAlreadyFinalized\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EpochNotEnded\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EpochNotFinalized\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"totalRewardAmount\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"epochRewardAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EpochRewardExceeded\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EpochRewardNotDistributed\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEpoch\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"LastEpochAlreadySet\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"lastEpoch\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"LastEpochExceeded\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ReentrancyGuardReentrantCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"a\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"b\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Test\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"startBlock\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"endBlock\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"rewardAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EpochCreated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newDaySize\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EpochDayUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"oldBonusAmount\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newBonusAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EpochDlpBonusUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"rewardAmount\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"penaltyAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EpochDlpRewardAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"rewardAmount\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"penaltyAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EpochDlpRewardOverridden\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EpochFinalized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newEpochRewardAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EpochRewardAmountUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newEpochSize\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EpochSizeUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"startBlock\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"endBlock\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"rewardAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EpochUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"lastEpoch\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"LastEpochSet\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"DLP_PERFORMANCE_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"DLP_REWARD_DEPLOYER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"addEpochDlpBonusAmount\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"createEpochs\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"blockNumber\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"createEpochsUntilBlockNumber\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"daySize\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dlpPerformance\",\n    outputs: [\n      {\n        internalType: \"contract IDLPPerformance\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dlpRegistry\",\n    outputs: [\n      {\n        internalType: \"contract IDLPRegistry\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dlpRewardDeployer\",\n    outputs: [\n      {\n        internalType: \"contract IDLPRewardDeployer\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"epochDlpIds\",\n    outputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"epochDlpIdsWithBonus\",\n    outputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"epochDlps\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"bool\",\n            name: \"isTopDlp\",\n            type: \"bool\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"rewardAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"penaltyAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"bonusAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"distributedAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"distributedPenaltyAmount\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IVanaEpoch.EpochDlpInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"epochRewardAmount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"epochSize\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"epochs\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"startBlock\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"endBlock\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"rewardAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"bool\",\n            name: \"isFinalized\",\n            type: \"bool\",\n          },\n        ],\n        internalType: \"struct IVanaEpoch.EpochInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"epochsCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"forceFinalizedEpoch\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"dlpRegistryAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"daySize\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"epochSize\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"epochRewardAmount\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct VanaEpochImplementation.InitializeParams\",\n        name: \"params\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"lastEpoch\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"overrideEpochDlpBonusAmount\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"rewardAmount\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"penaltyAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"overrideEpochDlpReward\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"dlpId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"rewardAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"penaltyAmount\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IVanaEpoch.Rewards[]\",\n        name: \"dlpRewards\",\n        type: \"tuple[]\",\n      },\n    ],\n    name: \"saveEpochDlpRewards\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"_lastEpoch\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"setLastEpoch\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newDaySize\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateDaySize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"dlpPerformanceAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateDlpPerformance\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"dlpRegistryAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateDlpRegistry\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"dlpRewardDeployerAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateDlpRewardDeployer\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"epochId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"startBlock\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"endBlock\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"rewardAmount\",\n        type: \"uint256\",\n      },\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"dlpId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"rewardAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"penaltyAmount\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IVanaEpoch.Rewards[]\",\n        name: \"dlpRewards\",\n        type: \"tuple[]\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"isFinalized\",\n        type: \"bool\",\n      },\n    ],\n    name: \"updateEpoch\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newEpochRewardAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateEpochRewardAmount\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newEpochSizeInDays\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateEpochSize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newEpochsCount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateEpochsCount\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default VanaEpochABI;\n", "// THIS FILE IS GENERATED, DO NOT EDIT MANUALLY\n// Run `npm run fetch-abis` to regenerate\n//\n// DLPRegistry Implementation Contract\n//\n// Generated: 2025-10-30T23:21:16.756Z\n// Network: Vana (Chain ID: 1480)\n//\n//   Proxy Address:\n//     0x4D59880a924526d1dD33260552Ff4328b1E18a43\n//     https://vanascan.io/address/0x4D59880a924526d1dD33260552Ff4328b1E18a43\n//\n//   Implementation Address:\n//     0x8c2d4de80a36EfA6936D233EF06D5FBf16C063dB\n//     https://vanascan.io/address/0x8c2d4de80a36EfA6936D233EF06D5FBf16C063dB\n\nexport const DLPRegistryABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DlpAddressCannotBeChanged\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DlpLpTokenIdNotSet\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"DlpTokenNotSet\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidDepositAmount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidDlpId\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidDlpStatus\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidDlpVerification\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidLpTokenId\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidName\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidTokenAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotDlpOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ReentrancyGuardReentrantCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TransferFailed\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"lpTokenId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"DlpLpTokenIdUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"dlpAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"treasuryAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"iconUrl\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"website\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"metadata\",\n        type: \"string\",\n      },\n    ],\n    name: \"DlpRegistered\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newDlpRegistrationDepositAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"DlpRegistrationDepositAmountUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"enum IDLPRegistry.DlpStatus\",\n        name: \"newStatus\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"DlpStatusUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"tokenAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"DlpTokenUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"dlpAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"treasuryAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"iconUrl\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"website\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"metadata\",\n        type: \"string\",\n      },\n    ],\n    name: \"DlpUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"verificationBlockNumber\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"DlpVerificationBlockUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"bool\",\n        name: \"verified\",\n        type: \"bool\",\n      },\n    ],\n    name: \"DlpVerificationUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"deregisterDlp\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"dlpAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"dlpIds\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"dlpName\",\n        type: \"string\",\n      },\n    ],\n    name: \"dlpNameToId\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dlpRegistrationDepositAmount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"dlps\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"id\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"dlpAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"tokenAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"treasuryAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"name\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"iconUrl\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"website\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"metadata\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"registrationBlockNumber\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"depositAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"enum IDLPRegistry.DlpStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"lpTokenId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"verificationBlockNumber\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDLPRegistry.DlpInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"dlpAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"dlpsByAddress\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"id\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"dlpAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"tokenAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"treasuryAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"name\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"iconUrl\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"website\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"metadata\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"registrationBlockNumber\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"depositAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"enum IDLPRegistry.DlpStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"lpTokenId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"verificationBlockNumber\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDLPRegistry.DlpInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"dlpName\",\n        type: \"string\",\n      },\n    ],\n    name: \"dlpsByName\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"id\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"dlpAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"tokenAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"treasuryAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"name\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"iconUrl\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"website\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"metadata\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"registrationBlockNumber\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"depositAmount\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"enum IDLPRegistry.DlpStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"lpTokenId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"verificationBlockNumber\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IDLPRegistry.DlpInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"dlpsCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"eligibleDlpsListAt\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eligibleDlpsListCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eligibleDlpsListValues\",\n    outputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"isEligibleDlp\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"dlpRootCoreAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"startDlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"endDlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"migrateDlpData\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"dlpAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address payable\",\n            name: \"treasuryAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"name\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"iconUrl\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"website\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"metadata\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IDLPRegistry.DlpRegistration\",\n        name: \"registrationInfo\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"registerDlp\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"treasury\",\n    outputs: [\n      {\n        internalType: \"contract ITreasury\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"unverifyDlp\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"dlpAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"address payable\",\n            name: \"treasuryAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"name\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"iconUrl\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"website\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"metadata\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IDLPRegistry.DlpRegistration\",\n        name: \"dlpUpdateInfo\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"updateDlp\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newDlpRegistrationDepositAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateDlpRegistrationDepositAmount\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"tokenAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"lpTokenId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateDlpToken\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"tokenAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"lpTokenId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"verificationBlockNumber\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateDlpTokenAndVerification\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"dlpId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"verificationBlockNumber\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateDlpVerificationBlock\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"treasuryAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTreasury\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"vanaEpochAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateVanaEpoch\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"vanaEpoch\",\n    outputs: [\n      {\n        internalType: \"contract IVanaEpoch\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default DLPRegistryABI;\n", "// Treasury contract for DLP Registry\n// Contract: DLPRegistryTreasury\n// Generated automatically - do not edit manually\n\nexport const DLPRegistryTreasuryABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressInsufficientBalance\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ReentrancyGuardReentrantCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"SafeERC20FailedOperation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAmount\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Transfer\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"CUSTODIAN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"VANA\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"custodian\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initCustodian\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"transfer\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newCustodian\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateCustodian\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    stateMutability: \"payable\",\n    type: \"receive\",\n  },\n] as const;\n\nexport default DLPRegistryTreasuryABI;\n", "// THIS FILE IS GENERATED, DO NOT EDIT MANUALLY\n// Run `npm run fetch-abis` to regenerate\n//\n// VanaTreasury Implementation Contract\n//\n// Generated: 2025-10-30T23:21:21.016Z\n// Network: Vana (Chain ID: 1480)\n//\n//   Proxy Address:\n//     0x8B32Ef32f22e72cc25D53f6E858f57cAe7E198f9\n//     https://vanascan.io/address/0x8B32Ef32f22e72cc25D53f6E858f57cAe7E198f9\n//\n//   Implementation Address:\n//     0xCeCF6742952b5469B01De3381989270129553656\n//     https://vanascan.io/address/0xCeCF6742952b5469B01De3381989270129553656\n\nexport const VanaTreasuryABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressInsufficientBalance\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ReentrancyGuardReentrantCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"SafeERC20FailedOperation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAmount\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Transfer\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"CUSTODIAN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"VANA\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"custodian\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initCustodian\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"transfer\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newCustodian\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateCustodian\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    stateMutability: \"payable\",\n    type: \"receive\",\n  },\n] as const;\n\nexport default VanaTreasuryABI;\n", "// THIS FILE IS GENERATED, DO NOT EDIT MANUALLY\n// Run `npm run fetch-abis` to regenerate\n//\n// DLPRegistryTreasury Implementation Contract\n//\n// Generated: 2025-10-30T23:21:21.788Z\n// Network: Vana (Chain ID: 1480)\n//\n//   Proxy Address:\n//     0xb12ce1d27bEeFe39b6F0110b1AB77C21Aa0c9F9a\n//     https://vanascan.io/address/0xb12ce1d27bEeFe39b6F0110b1AB77C21Aa0c9F9a\n//\n//   Implementation Address:\n//     0xbf341660A0960A16892c365f386f246840648370\n//     https://vanascan.io/address/0xbf341660A0960A16892c365f386f246840648370\n\nexport const DLPRegistryTreasuryABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressInsufficientBalance\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ReentrancyGuardReentrantCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n    ],\n    name: \"SafeERC20FailedOperation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAmount\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Transfer\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"CUSTODIAN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"VANA\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"custodian\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"initCustodian\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"transfer\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newCustodian\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateCustodian\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    stateMutability: \"payable\",\n    type: \"receive\",\n  },\n] as const;\n\nexport default DLPRegistryTreasuryABI;\n", "// THIS FILE IS GENERATED, DO NOT EDIT MANUALLY\n// Run `npm run fetch-abis` to regenerate\n//\n// VanaPoolStaking Implementation Contract\n//\n// Generated: 2026-01-05T17:36:46.222Z\n// Network: Moksha Testnet (Chain ID: 14800)\n//\n//   Proxy Address:\n//     0x641C18E2F286c86f96CE95C8ec1EB9fC0415Ca0e\n//     https://moksha.vanascan.io/address/0x641C18E2F286c86f96CE95C8ec1EB9fC0415Ca0e\n//\n//   Implementation Address:\n//     0x8ffd88ADa6E26B4b1585a2F994AA5DaA147053d3\n//     https://moksha.vanascan.io/address/0x8ffd88ADa6E26B4b1585a2F994AA5DaA147053d3\n\nexport const VanaPoolStakingABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"CannotRemoveRegistrationStake\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EntityNotActive\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EntityNotFound\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientShares\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InsufficientStakeAmount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAmount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidBondingPeriod\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEntity\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRecipient\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidSlippage\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotAuthorized\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotEntityOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ReentrancyGuardReentrantCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TransferFailed\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newBondingPeriod\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"BondingPeriodUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"EntityStakeRegistered\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newMinStake\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"MinStakeUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"staker\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"sharesIssued\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Staked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"staker\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"sharesBurned\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Unstaked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAX_BONDING_PERIOD\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"VANA_POOL_ENTITY_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"activeStakersListAt\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeStakersListCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"from\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"to\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"activeStakersListValues\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"bondingPeriod\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"staker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"getAccruingInterest\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"staker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"getEarnedRewards\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"staker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"getMaxUnstakeAmount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"maxVana\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"maxShares\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"limitingFactor\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"isInBondingPeriod\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"inactiveStakersListAt\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"inactiveStakersListCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"from\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"to\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"inactiveStakersListValues\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"trustedForwarderAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"initialMinStake\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"forwarder\",\n        type: \"address\",\n      },\n    ],\n    name: \"isTrustedForwarder\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"minStakeAmount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"registrationStake\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"registerEntityStake\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"recipient\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"shareAmountMin\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"stake\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"staker\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"stakerEntities\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"shares\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"costBasis\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"rewardEligibilityTimestamp\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"realizedRewards\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"vestedRewards\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IVanaPoolStaking.StakerEntity\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"trustedForwarder\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"shareAmount\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"vanaAmountMin\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"unstake\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"vanaAmount\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"shareAmountMax\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"unstakeVana\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newBondingPeriod\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateBondingPeriod\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newMinStake\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateMinStakeAmount\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"trustedForwarderAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateTrustedForwarder\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newVanaPoolEntityAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateVanaPoolEntity\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newVanaPoolTreasuryAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateVanaPoolTreasury\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"vanaPoolEntity\",\n    outputs: [\n      {\n        internalType: \"contract IVanaPoolEntity\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"vanaPoolTreasury\",\n    outputs: [\n      {\n        internalType: \"contract IVanaPoolTreasury\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default VanaPoolStakingABI;\n", "// THIS FILE IS GENERATED, DO NOT EDIT MANUALLY\n// Run `npm run fetch-abis` to regenerate\n//\n// VanaPoolEntity Implementation Contract\n//\n// Generated: 2026-04-02T16:08:31.343Z\n// Network: Moksha Testnet (Chain ID: 14800)\n//\n//   Proxy Address:\n//     0x44f20490A82e1f1F1cC25Dd3BA8647034eDdce30\n//     https://moksha.vanascan.io/address/0x44f20490A82e1f1F1cC25Dd3BA8647034eDdce30\n//\n//   Implementation Address:\n//     0x208cFA5A89386f1a33b6F43A2303d5cd5acc118a\n//     https://moksha.vanascan.io/address/0x208cFA5A89386f1a33b6F43A2303d5cd5acc118a\n\nexport const VanaPoolEntityABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EntityNameAlreadyExists\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEntityId\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidEntityStatus\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidName\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidParam\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidRegistrationStake\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NameTooShort\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotAuthorized\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotEntityOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ReentrancyGuardReentrantCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"StakersStillPresent\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"TransferFailed\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"maxAPY\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EntityCreated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newMaxAPY\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"EntityMaxAPYUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"enum IVanaPoolEntity.EntityStatus\",\n        name: \"newStatus\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"EntityStatusUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n    ],\n    name: \"EntityUpdated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ForfeitedRewardsReturned\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"RewardsAdded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"distributedAmount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"RewardsProcessed\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"VANA_POOL_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"activeEntitiesValues\",\n    outputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"addRewards\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256[]\",\n        name: \"entityIds\",\n        type: \"uint256[]\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"amounts\",\n        type: \"uint256[]\",\n      },\n    ],\n    name: \"addTotalDistributedRewards\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"calculateContinuousAPYByEntity\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"exponent\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"calculateExponential\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"r\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"principal\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"apy\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"time\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"calculateYield\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"name\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IVanaPoolEntity.EntityRegistrationInfo\",\n        name: \"entityRegistrationInfo\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"createEntity\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"entities\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"entityId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"enum IVanaPoolEntity.EntityStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"string\",\n            name: \"name\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"maxAPY\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"lockedRewardPool\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"activeRewardPool\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"totalShares\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"lastUpdateTimestamp\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"totalDistributedRewards\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IVanaPoolEntity.EntityInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"entitiesCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"entityName\",\n        type: \"string\",\n      },\n    ],\n    name: \"entityByName\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint256\",\n            name: \"entityId\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"enum IVanaPoolEntity.EntityStatus\",\n            name: \"status\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"string\",\n            name: \"name\",\n            type: \"string\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"maxAPY\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"lockedRewardPool\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"activeRewardPool\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"totalShares\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"lastUpdateTimestamp\",\n            type: \"uint256\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"totalDistributedRewards\",\n            type: \"uint256\",\n          },\n        ],\n        internalType: \"struct IVanaPoolEntity.EntityInfo\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"entityName\",\n        type: \"string\",\n      },\n    ],\n    name: \"entityNameToId\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"entityShareToVana\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"vanaPoolStakingAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"initialMinRegistrationStake\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"initialMaxAPYDefault\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"maxAPYDefault\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"minRegistrationStake\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"processRewards\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"returnForfeitedRewards\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        components: [\n          {\n            internalType: \"address\",\n            name: \"ownerAddress\",\n            type: \"address\",\n          },\n          {\n            internalType: \"string\",\n            name: \"name\",\n            type: \"string\",\n          },\n        ],\n        internalType: \"struct IVanaPoolEntity.EntityRegistrationInfo\",\n        name: \"entityRegistrationInfo\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"updateEntity\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"newMaxAPY\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateEntityMaxAPY\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"shares\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"bool\",\n        name: \"isStake\",\n        type: \"bool\",\n      },\n    ],\n    name: \"updateEntityPool\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"newMinRegistrationStake\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"updateMinRegistrationStake\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newVanaPoolStakingAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateVanaPool\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"vanaPoolStaking\",\n    outputs: [\n      {\n        internalType: \"contract IVanaPoolStaking\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"entityId\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"vanaToEntityShare\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n] as const;\n\nexport default VanaPoolEntityABI;\n", "// THIS FILE IS GENERATED, DO NOT EDIT MANUALLY\n// Run `npm run fetch-abis` to regenerate\n//\n// VanaPoolTreasury Implementation Contract\n//\n// Generated: 2025-10-30T23:21:22.596Z\n// Network: Vana (Chain ID: 1480)\n//\n//   Proxy Address:\n//     0x143BE72CF2541604A7691933CAccd6D9cC17c003\n//     https://vanascan.io/address/0x143BE72CF2541604A7691933CAccd6D9cC17c003\n//\n//   Implementation Address:\n//     0x6Afeb9e8A15Bc3a8677e8c5C1A06eD1E8114D7a2\n//     https://vanascan.io/address/0x6Afeb9e8A15Bc3a8677e8c5C1A06eD1E8114D7a2\n\nexport const VanaPoolTreasuryABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"vanaPoolAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address payable\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"transferVana\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"vanaPoolAddress\",\n        type: \"address\",\n      },\n    ],\n    name: \"updateVanaPool\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"vanaPool\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"version\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    stateMutability: \"payable\",\n    type: \"receive\",\n  },\n] as const;\n\nexport default VanaPoolTreasuryABI;\n", "// THIS FILE IS GENERATED, DO NOT EDIT MANUALLY\n// Run `npm run fetch-abis` to regenerate\n//\n// DAT Implementation Contract\n//\n// Generated: 2025-10-30T23:21:18.703Z\n// Network: Vana (Chain ID: 1480)\n//\n//   Contract Address:\n//     0xA706b93ccED89f13340673889e29F0a5cd84212d\n//     https://vanascan.io/address/0xA706b93ccED89f13340673889e29F0a5cd84212d\n\nexport const DATABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AccountBlocked\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"length1\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length2\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ArrayLengthMismatch\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n    ],\n    name: \"BlockListDoesNotContain\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"reason\",\n        type: \"string\",\n      },\n    ],\n    name: \"BlockingRejected\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"increasedSupply\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"cap\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20ExceededCap\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"allowance\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"needed\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20InsufficientAllowance\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"balance\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"needed\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20InsufficientBalance\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"approver\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC20InvalidApprover\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"cap\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20InvalidCap\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"receiver\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC20InvalidReceiver\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC20InvalidSender\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC20InvalidSpender\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"paramName\",\n        type: \"string\",\n      },\n    ],\n    name: \"EmptyString\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"IndexOutOfBounds\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAmount\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressBlocked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressUnblocked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Approval\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"from\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Transfer\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MINTER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n    ],\n    name: \"allowance\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"approve\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"balanceOf\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n    ],\n    name: \"blockAddress\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"i\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"blockListAt\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"blockListLength\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"burn\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"burnFrom\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"cap\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"decimals\",\n    outputs: [\n      {\n        internalType: \"uint8\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"name_\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"symbol_\",\n        type: \"string\",\n      },\n      {\n        internalType: \"address\",\n        name: \"owner_\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"cap_\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address[]\",\n        name: \"receivers\",\n        type: \"address[]\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"amounts\",\n        type: \"uint256[]\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n    ],\n    name: \"isBlocked\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"mint\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"name\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"id\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"symbol\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"templateName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"totalSupply\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"transfer\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"from\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"transferFrom\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n    ],\n    name: \"unblockAddress\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nexport default DATABI;\n", "// THIS FILE IS GENERATED, DO NOT EDIT MANUALLY\n// Run `npm run fetch-abis` to regenerate\n//\n// DATFactory Implementation Contract\n//\n// Generated: 2025-10-30T23:21:17.957Z\n// Network: Vana (Chain ID: 1480)\n//\n//   Proxy Address:\n//     0x40f8bccF35a75ecef63BC3B1B3E06ffEB9220644\n//     https://vanascan.io/address/0x40f8bccF35a75ecef63BC3B1B3E06ffEB9220644\n//\n//   Implementation Address:\n//     0x8CDB4B1130A7B5A74d8512a824CaAe928f2B35Ce\n//     https://vanascan.io/address/0x8CDB4B1130A7B5A74d8512a824CaAe928f2B35Ce\n\nexport const DATFactoryABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"target\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressEmptyCode\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"CapTooLow\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint64\",\n        name: \"duration\",\n        type: \"uint64\",\n      },\n      {\n        internalType: \"uint64\",\n        name: \"cliff\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"DurationTooShort\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1167FailedCreateClone\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC1967InvalidImplementation\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC1967NonPayable\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"total\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"cap\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ExceedsCap\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExcessiveCap\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"FailedInnerCall\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"enum IDATFactory.DATType\",\n        name: \"datType\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"InvalidDATType\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidDefaultCap\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint64\",\n        name: \"start\",\n        type: \"uint64\",\n      },\n      {\n        internalType: \"uint64\",\n        name: \"cliff\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"StartTimeOverflow\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"UUPSUnauthorizedCallContext\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"slot\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"UUPSUnsupportedProxiableUUID\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAmount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroDuration\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroOwner\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroSalt\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroStartTime\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"token\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"string\",\n        name: \"symbol\",\n        type: \"string\",\n      },\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"cap\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"DATCreated\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"implementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"Upgraded\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"wallet\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"beneficiary\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"start\",\n        type: \"uint64\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"cliff\",\n        type: \"uint64\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"duration\",\n        type: \"uint64\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"VestingWalletCreated\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MAINTAINER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"UPGRADE_INTERFACE_VERSION\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        components: [\n          {\n            internalType: \"enum IDATFactory.DATType\",\n            name: \"datType\",\n            type: \"uint8\",\n          },\n          {\n            internalType: \"string\",\n            name: \"name\",\n            type: \"string\",\n          },\n          {\n            internalType: \"string\",\n            name: \"symbol\",\n            type: \"string\",\n          },\n          {\n            internalType: \"address\",\n            name: \"owner\",\n            type: \"address\",\n          },\n          {\n            internalType: \"uint256\",\n            name: \"cap\",\n            type: \"uint256\",\n          },\n          {\n            components: [\n              {\n                internalType: \"address\",\n                name: \"beneficiary\",\n                type: \"address\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"start\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"cliff\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"uint64\",\n                name: \"duration\",\n                type: \"uint64\",\n              },\n              {\n                internalType: \"uint256\",\n                name: \"amount\",\n                type: \"uint256\",\n              },\n            ],\n            internalType: \"struct IDATFactory.VestingParams[]\",\n            name: \"schedules\",\n            type: \"tuple[]\",\n          },\n          {\n            internalType: \"bytes32\",\n            name: \"salt\",\n            type: \"bytes32\",\n          },\n        ],\n        internalType: \"struct IDATFactory.CreateTokenParams\",\n        name: \"params\",\n        type: \"tuple\",\n      },\n    ],\n    name: \"createToken\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"tokenAddr\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"datListAt\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"datListCount\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"datListValues\",\n    outputs: [\n      {\n        internalType: \"address[]\",\n        name: \"\",\n        type: \"address[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"enum IDATFactory.DATType\",\n        name: \"datType\",\n        type: \"uint8\",\n      },\n    ],\n    name: \"datTemplates\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"templateAddress\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"ownerAddress\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"minCap\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"maxCap\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"datImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"datVotesImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"datPausableImplementation\",\n        type: \"address\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"maxCapDefault\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"minCapDefault\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"enum IDATFactory.DATType\",\n        name: \"datType\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"predictAddress\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"proxiableUUID\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"interfaceId\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"newImplementation\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes\",\n        name: \"data\",\n        type: \"bytes\",\n      },\n    ],\n    name: \"upgradeToAndCall\",\n    outputs: [],\n    stateMutability: \"payable\",\n    type: \"function\",\n  },\n] as const;\n\nexport default DATFactoryABI;\n", "// THIS FILE IS GENERATED, DO NOT EDIT MANUALLY\n// Run `npm run fetch-abis` to regenerate\n//\n// DATPausable Implementation Contract\n//\n// Generated: 2025-10-30T23:21:19.352Z\n// Network: Vana (Chain ID: 1480)\n//\n//   Contract Address:\n//     0xe69FE86f0B95cC2f8416Fe22815c85DC8887e76e\n//     https://vanascan.io/address/0xe69FE86f0B95cC2f8416Fe22815c85DC8887e76e\n\nexport const DATPausableABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AccountBlocked\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"length1\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length2\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ArrayLengthMismatch\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n    ],\n    name: \"BlockListDoesNotContain\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"reason\",\n        type: \"string\",\n      },\n    ],\n    name: \"BlockingRejected\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"CheckpointUnorderedInsertion\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ECDSAInvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"s\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureS\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"increasedSupply\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"cap\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20ExceededCap\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"increasedSupply\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"cap\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20ExceededSafeSupply\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"allowance\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"needed\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20InsufficientAllowance\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"balance\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"needed\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20InsufficientBalance\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"approver\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC20InvalidApprover\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"cap\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20InvalidCap\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"receiver\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC20InvalidReceiver\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC20InvalidSender\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC20InvalidSpender\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"deadline\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC2612ExpiredSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"signer\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC2612InvalidSigner\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"timepoint\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint48\",\n        name: \"clock\",\n        type: \"uint48\",\n      },\n    ],\n    name: \"ERC5805FutureLookup\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC6372InconsistentClock\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"paramName\",\n        type: \"string\",\n      },\n    ],\n    name: \"EmptyString\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"EnforcedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ExpectedPause\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"IndexOutOfBounds\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"currentNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"InvalidAccountNonce\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint8\",\n        name: \"bits\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"SafeCastOverflowedUintDowncast\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"expiry\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"VotesExpiredSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAmount\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressBlocked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressUnblocked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Approval\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"delegator\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"fromDelegate\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"toDelegate\",\n        type: \"address\",\n      },\n    ],\n    name: \"DelegateChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"delegate\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"previousVotes\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newVotes\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"DelegateVotesChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Paused\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"from\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Transfer\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"Unpaused\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"CLOCK_MODE\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"DOMAIN_SEPARATOR\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MINTER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n    ],\n    name: \"allowance\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"approve\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"balanceOf\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n    ],\n    name: \"blockAddress\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"i\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"blockListAt\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"blockListLength\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"burn\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"burnFrom\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"cap\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint32\",\n        name: \"pos\",\n        type: \"uint32\",\n      },\n    ],\n    name: \"checkpoints\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint48\",\n            name: \"_key\",\n            type: \"uint48\",\n          },\n          {\n            internalType: \"uint208\",\n            name: \"_value\",\n            type: \"uint208\",\n          },\n        ],\n        internalType: \"struct Checkpoints.Checkpoint208\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"clock\",\n    outputs: [\n      {\n        internalType: \"uint48\",\n        name: \"\",\n        type: \"uint48\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"decimals\",\n    outputs: [\n      {\n        internalType: \"uint8\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"delegatee\",\n        type: \"address\",\n      },\n    ],\n    name: \"delegate\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"delegatee\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"nonce\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"expiry\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint8\",\n        name: \"v\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"r\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"s\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"delegateBySig\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"delegates\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"timepoint\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"getPastTotalSupply\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"timepoint\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"getPastVotes\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"getVotes\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"name_\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"symbol_\",\n        type: \"string\",\n      },\n      {\n        internalType: \"address\",\n        name: \"owner_\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"cap_\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address[]\",\n        name: \"receivers\",\n        type: \"address[]\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"amounts\",\n        type: \"uint256[]\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n    ],\n    name: \"isBlocked\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"mint\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"name\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n    ],\n    name: \"nonces\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"numCheckpoints\",\n    outputs: [\n      {\n        internalType: \"uint32\",\n        name: \"\",\n        type: \"uint32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"pause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"paused\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"deadline\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint8\",\n        name: \"v\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"r\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"s\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"permit\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"id\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"symbol\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"templateName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"totalSupply\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"transfer\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"from\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"transferFrom\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n    ],\n    name: \"unblockAddress\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"unpause\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nexport default DATPausableABI;\n", "// THIS FILE IS GENERATED, DO NOT EDIT MANUALLY\n// Run `npm run fetch-abis` to regenerate\n//\n// DATVotes Implementation Contract\n//\n// Generated: 2025-10-30T23:21:19.975Z\n// Network: Vana (Chain ID: 1480)\n//\n//   Contract Address:\n//     0xaE04c8A77E9B27869eb563720524A9aE0baf1831\n//     https://vanascan.io/address/0xaE04c8A77E9B27869eb563720524A9aE0baf1831\n\nexport const DATVotesABI = [\n  {\n    inputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"constructor\",\n  },\n  {\n    inputs: [],\n    name: \"AccessControlBadConfirmation\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"neededRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"AccessControlUnauthorizedAccount\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"AccountBlocked\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"length1\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length2\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ArrayLengthMismatch\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n    ],\n    name: \"BlockListDoesNotContain\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n      {\n        internalType: \"string\",\n        name: \"reason\",\n        type: \"string\",\n      },\n    ],\n    name: \"BlockingRejected\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"CheckpointUnorderedInsertion\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ECDSAInvalidSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureLength\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"s\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"ECDSAInvalidSignatureS\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"increasedSupply\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"cap\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20ExceededCap\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"increasedSupply\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"cap\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20ExceededSafeSupply\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"allowance\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"needed\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20InsufficientAllowance\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"balance\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"needed\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20InsufficientBalance\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"approver\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC20InvalidApprover\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"cap\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC20InvalidCap\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"receiver\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC20InvalidReceiver\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC20InvalidSender\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC20InvalidSpender\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"deadline\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"ERC2612ExpiredSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"signer\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n    ],\n    name: \"ERC2612InvalidSigner\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"timepoint\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint48\",\n        name: \"clock\",\n        type: \"uint48\",\n      },\n    ],\n    name: \"ERC5805FutureLookup\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ERC6372InconsistentClock\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"paramName\",\n        type: \"string\",\n      },\n    ],\n    name: \"EmptyString\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"index\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"length\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"IndexOutOfBounds\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"currentNonce\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"InvalidAccountNonce\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"InvalidInitialization\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"NotInitializing\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint8\",\n        name: \"bits\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"SafeCastOverflowedUintDowncast\",\n    type: \"error\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"expiry\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"VotesExpiredSignature\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAddress\",\n    type: \"error\",\n  },\n  {\n    inputs: [],\n    name: \"ZeroAmount\",\n    type: \"error\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressBlocked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    name: \"AddressUnblocked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Approval\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"delegator\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"fromDelegate\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"toDelegate\",\n        type: \"address\",\n      },\n    ],\n    name: \"DelegateChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"delegate\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"previousVotes\",\n        type: \"uint256\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"newVotes\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"DelegateVotesChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [],\n    name: \"EIP712DomainChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: false,\n        internalType: \"uint64\",\n        name: \"version\",\n        type: \"uint64\",\n      },\n    ],\n    name: \"Initialized\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"previousAdminRole\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"newAdminRole\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"RoleAdminChanged\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleGranted\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"sender\",\n        type: \"address\",\n      },\n    ],\n    name: \"RoleRevoked\",\n    type: \"event\",\n  },\n  {\n    anonymous: false,\n    inputs: [\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"from\",\n        type: \"address\",\n      },\n      {\n        indexed: true,\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        indexed: false,\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"Transfer\",\n    type: \"event\",\n  },\n  {\n    inputs: [],\n    name: \"CLOCK_MODE\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"DEFAULT_ADMIN_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"DOMAIN_SEPARATOR\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"MINTER_ROLE\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n    ],\n    name: \"allowance\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"approve\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"balanceOf\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n    ],\n    name: \"blockAddress\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"i\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"blockListAt\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"blockListLength\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"burn\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"burnFrom\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"cap\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint32\",\n        name: \"pos\",\n        type: \"uint32\",\n      },\n    ],\n    name: \"checkpoints\",\n    outputs: [\n      {\n        components: [\n          {\n            internalType: \"uint48\",\n            name: \"_key\",\n            type: \"uint48\",\n          },\n          {\n            internalType: \"uint208\",\n            name: \"_value\",\n            type: \"uint208\",\n          },\n        ],\n        internalType: \"struct Checkpoints.Checkpoint208\",\n        name: \"\",\n        type: \"tuple\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"clock\",\n    outputs: [\n      {\n        internalType: \"uint48\",\n        name: \"\",\n        type: \"uint48\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"decimals\",\n    outputs: [\n      {\n        internalType: \"uint8\",\n        name: \"\",\n        type: \"uint8\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"delegatee\",\n        type: \"address\",\n      },\n    ],\n    name: \"delegate\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"delegatee\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"nonce\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"expiry\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint8\",\n        name: \"v\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"r\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"s\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"delegateBySig\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"delegates\",\n    outputs: [\n      {\n        internalType: \"address\",\n        name: \"\",\n        type: \"address\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"eip712Domain\",\n    outputs: [\n      {\n        internalType: \"bytes1\",\n        name: \"fields\",\n        type: \"bytes1\",\n      },\n      {\n        internalType: \"string\",\n        name: \"name\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"version\",\n        type: \"string\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"chainId\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address\",\n        name: \"verifyingContract\",\n        type: \"address\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"salt\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"extensions\",\n        type: \"uint256[]\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"uint256\",\n        name: \"timepoint\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"getPastTotalSupply\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"timepoint\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"getPastVotes\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"getRoleAdmin\",\n    outputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"\",\n        type: \"bytes32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"getVotes\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"grantRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"hasRole\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"string\",\n        name: \"name_\",\n        type: \"string\",\n      },\n      {\n        internalType: \"string\",\n        name: \"symbol_\",\n        type: \"string\",\n      },\n      {\n        internalType: \"address\",\n        name: \"owner_\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"cap_\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"address[]\",\n        name: \"receivers\",\n        type: \"address[]\",\n      },\n      {\n        internalType: \"uint256[]\",\n        name: \"amounts\",\n        type: \"uint256[]\",\n      },\n    ],\n    name: \"initialize\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n    ],\n    name: \"isBlocked\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"amount\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"mint\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"name\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n    ],\n    name: \"nonces\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"numCheckpoints\",\n    outputs: [\n      {\n        internalType: \"uint32\",\n        name: \"\",\n        type: \"uint32\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"owner\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"spender\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"deadline\",\n        type: \"uint256\",\n      },\n      {\n        internalType: \"uint8\",\n        name: \"v\",\n        type: \"uint8\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"r\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"bytes32\",\n        name: \"s\",\n        type: \"bytes32\",\n      },\n    ],\n    name: \"permit\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"callerConfirmation\",\n        type: \"address\",\n      },\n    ],\n    name: \"renounceRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes32\",\n        name: \"role\",\n        type: \"bytes32\",\n      },\n      {\n        internalType: \"address\",\n        name: \"account\",\n        type: \"address\",\n      },\n    ],\n    name: \"revokeRole\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"bytes4\",\n        name: \"id\",\n        type: \"bytes4\",\n      },\n    ],\n    name: \"supportsInterface\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"symbol\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"templateName\",\n    outputs: [\n      {\n        internalType: \"string\",\n        name: \"\",\n        type: \"string\",\n      },\n    ],\n    stateMutability: \"pure\",\n    type: \"function\",\n  },\n  {\n    inputs: [],\n    name: \"totalSupply\",\n    outputs: [\n      {\n        internalType: \"uint256\",\n        name: \"\",\n        type: \"uint256\",\n      },\n    ],\n    stateMutability: \"view\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"transfer\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"from\",\n        type: \"address\",\n      },\n      {\n        internalType: \"address\",\n        name: \"to\",\n        type: \"address\",\n      },\n      {\n        internalType: \"uint256\",\n        name: \"value\",\n        type: \"uint256\",\n      },\n    ],\n    name: \"transferFrom\",\n    outputs: [\n      {\n        internalType: \"bool\",\n        name: \"\",\n        type: \"bool\",\n      },\n    ],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n  {\n    inputs: [\n      {\n        internalType: \"address\",\n        name: \"addr\",\n        type: \"address\",\n      },\n    ],\n    name: \"unblockAddress\",\n    outputs: [],\n    stateMutability: \"nonpayable\",\n    type: \"function\",\n  },\n] as const;\n\nexport default DATVotesABI;\n", "import { ComputeEngineABI } from \"./ComputeEngineImplementation\";\nimport { DataRegistryABI } from \"./DataRegistryImplementation\";\nimport { TeePoolPhalaABI } from \"./TeePoolPhalaImplementation\";\n// Data Portability Contracts\nimport { DataPortabilityPermissionsABI } from \"./DataPortabilityPermissionsImplementation\";\nimport { DataPortabilityServersABI } from \"./DataPortabilityServersImplementation\";\nimport { DataPortabilityGranteesABI } from \"./DataPortabilityGranteesImplementation\";\n\n// Data Access Infrastructure\nimport { DataRefinerRegistryABI } from \"./DataRefinerRegistryImplementation\";\nimport { QueryEngineABI } from \"./QueryEngineImplementation\";\nimport { ComputeInstructionRegistryABI } from \"./ComputeInstructionRegistryImplementation\";\n\n// TEE Pool Variants\nimport { TeePoolEphemeralStandardABI } from \"./TeePoolEphemeralStandardImplementation\";\nimport { TeePoolPersistentStandardABI } from \"./TeePoolPersistentStandardImplementation\";\nimport { TeePoolPersistentGpuABI } from \"./TeePoolPersistentGpuImplementation\";\nimport { TeePoolDedicatedStandardABI } from \"./TeePoolDedicatedStandardImplementation\";\nimport { TeePoolDedicatedGpuABI } from \"./TeePoolDedicatedGpuImplementation\";\n\n// Vana Epoch / DLP Registry\nimport { VanaEpochABI } from \"./VanaEpochImplementation\";\nimport { DLPRegistryABI } from \"./DLPRegistryImplementation\";\nimport { DLPRegistryTreasuryABI } from \"./DLPTreasuryImplementation\";\nimport { VanaTreasuryABI } from \"./VanaTreasuryImplementation\";\nimport { DLPRegistryTreasuryABI as DLPRegistryTreasuryImplementationABI } from \"./DLPRegistryTreasuryImplementation\";\n\n// VanaPool (Staking)\nimport { VanaPoolStakingABI } from \"./VanaPoolStakingImplementation\";\nimport { VanaPoolEntityABI } from \"./VanaPoolEntityImplementation\";\nimport { VanaPoolTreasuryABI } from \"./VanaPoolTreasuryImplementation\";\n\n// DLP Deployment Contracts\nimport { DATABI } from \"./DATImplementation\";\nimport { DATFactoryABI } from \"./DATFactoryImplementation\";\nimport { DATPausableABI } from \"./DATPausableImplementation\";\nimport { DATVotesABI } from \"./DATVotesImplementation\";\n\nconst contractAbis = {\n  DataPortabilityPermissions: DataPortabilityPermissionsABI,\n  DataPortabilityServers: DataPortabilityServersABI,\n  DataPortabilityGrantees: DataPortabilityGranteesABI,\n  DataRegistry: DataRegistryABI,\n  TeePoolPhala: TeePoolPhalaABI,\n  ComputeEngine: ComputeEngineABI,\n\n  // Data Access Infrastructure\n  DataRefinerRegistry: DataRefinerRegistryABI,\n  QueryEngine: QueryEngineABI,\n  ComputeInstructionRegistry: ComputeInstructionRegistryABI,\n\n  // TEE Pool Variants\n  TeePoolEphemeralStandard: TeePoolEphemeralStandardABI,\n  TeePoolPersistentStandard: TeePoolPersistentStandardABI,\n  TeePoolPersistentGpu: TeePoolPersistentGpuABI,\n  TeePoolDedicatedStandard: TeePoolDedicatedStandardABI,\n  TeePoolDedicatedGpu: TeePoolDedicatedGpuABI,\n\n  // Vana Epoch / DLP Registry\n  VanaEpoch: VanaEpochABI,\n  DLPRegistry: DLPRegistryABI,\n  DLPRegistryTreasury: DLPRegistryTreasuryABI,\n  DLPRegistryTreasuryImplementation: DLPRegistryTreasuryImplementationABI,\n  VanaTreasury: VanaTreasuryABI,\n\n  // VanaPool (Staking)\n  VanaPoolStaking: VanaPoolStakingABI,\n  VanaPoolEntity: VanaPoolEntityABI,\n  VanaPoolTreasury: VanaPoolTreasuryABI,\n\n  // DLP Deployment Contracts\n  DAT: DATABI,\n  DATFactory: DATFactoryABI,\n  DATPausable: DATPausableABI,\n  DATVotes: DATVotesABI,\n} as const;\n\nexport type ContractAbis = typeof contractAbis;\n\nexport type VanaContract = keyof ContractAbis;\n\n/**\n * Retrieves the ABI for a specific Vana contract\n *\n * @param contract - The name of the contract to get the ABI for\n * @returns The ABI array for the specified contract\n */\nexport function getAbi<T extends VanaContract>(contract: T): ContractAbis[T] {\n  const abi = contractAbis[contract];\n  if (!abi) {\n    throw new Error(`Unsupported contract: ${contract}`);\n  }\n  return abi;\n}\n\n// Export individual ABIs\nexport {\n  ComputeEngineABI,\n  DataRegistryABI,\n  TeePoolPhalaABI,\n  DataPortabilityPermissionsABI,\n  DataPortabilityServersABI,\n  DataPortabilityGranteesABI,\n  DataRefinerRegistryABI,\n  QueryEngineABI,\n  ComputeInstructionRegistryABI,\n  TeePoolEphemeralStandardABI,\n  TeePoolPersistentStandardABI,\n  TeePoolPersistentGpuABI,\n  TeePoolDedicatedStandardABI,\n  TeePoolDedicatedGpuABI,\n  VanaEpochABI,\n  DLPRegistryABI,\n  DLPRegistryTreasuryABI,\n  DLPRegistryTreasuryImplementationABI,\n  VanaPoolStakingABI,\n  VanaPoolEntityABI,\n  VanaPoolTreasuryABI,\n  DATABI,\n  DATFactoryABI,\n  DATPausableABI,\n  DATVotesABI,\n};\n", "// AUTO-GENERATED FILE - DO NOT EDIT\n// Generated by scripts/discover-addresses.ts on 2026-08-28\n// Source: src/config/contracts.config.ts + on-chain discovery\n\n/**\n * Complete registry of Vana protocol contract addresses.\n *\n * This file is AUTO-GENERATED by the discover-addresses script.\n * DO NOT EDIT THIS FILE MANUALLY.\n *\n * To add contracts:\n * 1. Edit src/config/contracts.config.ts\n * 2. Run `npm run discover-addresses`\n *\n * @category Configuration\n */\n\nexport const CONTRACTS = {\n  // ========================================\n  // ENTRY POINTS (from contracts.config.ts)\n  // ========================================\n  DataPortabilityEscrow: {\n    addresses: {\n      14800: \"0x07d7769081adc3a3DBe91f5E4B98E9A5a6B292e3\",\n      1480: \"0x07d7769081adc3a3DBe91f5E4B98E9A5a6B292e3\",\n    },\n  },\n  FeeRegistry: {\n    addresses: {\n      14800: \"0xb4FA18443E0FA6cdC0280D20b8cCDB2377D13Bf2\",\n      1480: \"0xb4FA18443E0FA6cdC0280D20b8cCDB2377D13Bf2\",\n    },\n  },\n  DataPortabilityPermissions: {\n    addresses: {\n      14800: \"0x4d3FA76064D88e0454cFc4CaD7e5FeC3e3124011\",\n      1480: \"0x4d3FA76064D88e0454cFc4CaD7e5FeC3e3124011\",\n    },\n  },\n  DataPortabilityServers: {\n    addresses: {\n      14800: \"0xCae2CE0e9caa6643ed28186cF57bd40Bd9E17Eab\",\n      1480: \"0xCae2CE0e9caa6643ed28186cF57bd40Bd9E17Eab\",\n    },\n  },\n  DataPortabilityGrantees: {\n    addresses: {\n      14800: \"0x8325C0A0948483EdA023A1A2Fd895e62C5131234\",\n      1480: \"0x8325C0A0948483EdA023A1A2Fd895e62C5131234\",\n    },\n  },\n  DataRegistry: {\n    addresses: {\n      14800: \"0x8C8788f98385F6ba1adD4234e551ABba0f82Cb7C\",\n      1480: \"0x8C8788f98385F6ba1adD4234e551ABba0f82Cb7C\",\n    },\n  },\n  ComputeEngine: {\n    addresses: {\n      14800: \"0xb2BFe33FA420c45F1Cf1287542ad81ae935447bd\",\n      1480: \"0xb2BFe33FA420c45F1Cf1287542ad81ae935447bd\",\n    },\n  },\n  QueryEngine: {\n    addresses: {\n      14800: \"0xd25Eb66EA2452cf3238A2eC6C1FD1B7F5B320490\",\n      1480: \"0xd25Eb66EA2452cf3238A2eC6C1FD1B7F5B320490\",\n    },\n  },\n  DataRefinerRegistry: {\n    addresses: {\n      14800: \"0x93c3EF89369fDcf08Be159D9DeF0F18AB6Be008c\",\n      1480: \"0x93c3EF89369fDcf08Be159D9DeF0F18AB6Be008c\",\n    },\n  },\n  ComputeInstructionRegistry: {\n    addresses: {\n      14800: \"0x5786B12b4c6Ba2bFAF0e77Ed30Bf6d32805563A5\",\n      1480: \"0x5786B12b4c6Ba2bFAF0e77Ed30Bf6d32805563A5\",\n    },\n  },\n  TeePoolPhala: {\n    addresses: {\n      14800: \"0xE8EC6BD73b23Ad40E6B9a6f4bD343FAc411bD99A\",\n      1480: \"0xE8EC6BD73b23Ad40E6B9a6f4bD343FAc411bD99A\",\n    },\n  },\n  TeePoolEphemeralStandard: {\n    addresses: {\n      14800: \"0xe124bae846D5ec157f75Bd9e68ca87C4d2AB835A\",\n      1480: \"0xe124bae846D5ec157f75Bd9e68ca87C4d2AB835A\",\n    },\n  },\n  TeePoolPersistentStandard: {\n    addresses: {\n      14800: \"0xe8bB8d0629651Cf33e0845d743976Dc1f0971d76\",\n      1480: \"0xe8bB8d0629651Cf33e0845d743976Dc1f0971d76\",\n    },\n  },\n  TeePoolPersistentGpu: {\n    addresses: {\n      14800: \"0x1c346Cd74f8551f8fa13f3F4b6b8dAE22338E6a9\",\n      1480: \"0x1c346Cd74f8551f8fa13f3F4b6b8dAE22338E6a9\",\n    },\n  },\n  TeePoolDedicatedStandard: {\n    addresses: {\n      14800: \"0xf024b7ac5E8417416f53B41ecfa58C8e9396687d\",\n      1480: \"0xf024b7ac5E8417416f53B41ecfa58C8e9396687d\",\n    },\n  },\n  TeePoolDedicatedGpu: {\n    addresses: {\n      14800: \"0xB1686FA9620bBf851714d1cB47b8a4Bf4664644E\",\n      1480: \"0xB1686FA9620bBf851714d1cB47b8a4Bf4664644E\",\n    },\n  },\n  VanaEpoch: {\n    addresses: {\n      14800: \"0x2063cFF0609D59bCCc196E20Eb58A8696a6b15A0\",\n      1480: \"0x2063cFF0609D59bCCc196E20Eb58A8696a6b15A0\",\n    },\n  },\n  DLPRegistry: {\n    addresses: {\n      14800: \"0x4D59880a924526d1dD33260552Ff4328b1E18a43\",\n      1480: \"0x4D59880a924526d1dD33260552Ff4328b1E18a43\",\n    },\n  },\n  VanaPoolStaking: {\n    addresses: {\n      14800: \"0x641C18E2F286c86f96CE95C8ec1EB9fC0415Ca0e\",\n      1480: \"0x641C18E2F286c86f96CE95C8ec1EB9fC0415Ca0e\",\n    },\n  },\n  DATFactory: {\n    addresses: {\n      14800: \"0x40f8bccF35a75ecef63BC3B1B3E06ffEB9220644\",\n      1480: \"0x40f8bccF35a75ecef63BC3B1B3E06ffEB9220644\",\n    },\n  },\n  DAT: {\n    addresses: {\n      14800: \"0xA706b93ccED89f13340673889e29F0a5cd84212d\",\n      1480: \"0xA706b93ccED89f13340673889e29F0a5cd84212d\",\n    },\n  },\n  DATPausable: {\n    addresses: {\n      14800: \"0xe69FE86f0B95cC2f8416Fe22815c85DC8887e76e\",\n      1480: \"0xe69FE86f0B95cC2f8416Fe22815c85DC8887e76e\",\n    },\n  },\n  DATVotes: {\n    addresses: {\n      14800: \"0xaE04c8A77E9B27869eb563720524A9aE0baf1831\",\n      1480: \"0xaE04c8A77E9B27869eb563720524A9aE0baf1831\",\n    },\n  },\n  WVANA: {\n    addresses: {\n      14800: \"0xbccc4b4c6530F82FE309c5E845E50b5E9C89f2AD\",\n      1480: \"0x00EDdD9621Fb08436d0331c149D1690909a5906d\",\n    },\n  },\n  UniswapV3NonfungiblePositionManager: {\n    addresses: {\n      14800: \"0x48Bd633f4B9128a38Ebb4a48b6975EB3Eaf1931b\",\n      1480: \"0x45a2992e1bFdCF9b9AcE0a84A238f2E56F481816\",\n    },\n  },\n  UniswapV3QuoterV2: {\n    addresses: {\n      14800: \"0x3152246f3CD4dD465292Dd4Ffd792E2Cf602e332\",\n      1480: \"0x1b13728ea3C90863990aC0e05987CfeC1888908c\",\n    },\n  },\n  Multicall3: {\n    addresses: {\n      14800: \"0xD8d2dFca27E8797fd779F8547166A2d3B29d360E\",\n      1480: \"0xD8d2dFca27E8797fd779F8547166A2d3B29d360E\",\n    },\n  },\n  Multisend: {\n    addresses: {\n      14800: \"0x8807e8BCDFbaA8c2761760f3FBA37F6f7F2C5b2d\",\n      1480: \"0x8807e8BCDFbaA8c2761760f3FBA37F6f7F2C5b2d\",\n    },\n  },\n\n  // ========================================\n  // AUTO-DISCOVERED (via on-chain queries)\n  // ========================================\n  ComputeEngineTreasury: {\n    addresses: {\n      14800: \"0xceB33C501B624D984bD1Ed3298f6D1d8F7CE03d1\",\n      1480: \"0xceB33C501B624D984bD1Ed3298f6D1d8F7CE03d1\",\n    },\n    _meta: {\n      discoveredFrom: \"ComputeEngine\",\n      lastUpdated: \"2026-08-28\",\n    },\n  },\n  VanaTreasury: {\n    addresses: {\n      14800: \"0x8B32Ef32f22e72cc25D53f6E858f57cAe7E198f9\",\n      1480: \"0x8B32Ef32f22e72cc25D53f6E858f57cAe7E198f9\",\n    },\n    _meta: {\n      discoveredFrom: \"QueryEngine\",\n      lastUpdated: \"2026-08-28\",\n    },\n  },\n  DLPRegistryTreasury: {\n    addresses: {\n      14800: \"0xb12ce1d27bEeFe39b6F0110b1AB77C21Aa0c9F9a\",\n      1480: \"0xb12ce1d27bEeFe39b6F0110b1AB77C21Aa0c9F9a\",\n    },\n    _meta: {\n      discoveredFrom: \"DLPRegistry\",\n      lastUpdated: \"2026-08-28\",\n    },\n  },\n  VanaPoolTreasury: {\n    addresses: {\n      14800: \"0x143BE72CF2541604A7691933CAccd6D9cC17c003\",\n      1480: \"0x143BE72CF2541604A7691933CAccd6D9cC17c003\",\n    },\n    _meta: {\n      discoveredFrom: \"VanaPoolStaking\",\n      lastUpdated: \"2026-08-28\",\n    },\n  },\n  VanaPoolEntity: {\n    addresses: {\n      14800: \"0x44f20490A82e1f1F1cC25Dd3BA8647034eDdce30\",\n      1480: \"0x44f20490A82e1f1F1cC25Dd3BA8647034eDdce30\",\n    },\n    _meta: {\n      discoveredFrom: \"VanaPoolStaking\",\n      lastUpdated: \"2026-08-28\",\n    },\n  },\n} as const;\n\n/**\n * Union of contract names accepted by `getContractAddress`.\n *\n * @remarks\n * This is derived from the address registry rather than the ABI registry, so\n * address-only contracts such as `DataPortabilityEscrow` and `FeeRegistry`\n * are included.\n *\n * @category Contracts\n */\nexport type VanaContractAddress = keyof typeof CONTRACTS;\n\n// Transform for backwards compatibility\nexport const CONTRACT_ADDRESSES: Record<number, Record<string, string>> = {\n  14800: Object.fromEntries(\n    Object.entries(CONTRACTS)\n      .map(([name, info]) => [name, info.addresses[14800]])\n      .filter(([, addr]) => addr),\n  ),\n  1480: Object.fromEntries(\n    Object.entries(CONTRACTS)\n      .map(([name, info]) => [name, info.addresses[1480]])\n      .filter(([, addr]) => addr),\n  ),\n};\n\nexport const UTILITY_ADDRESSES = {\n  14800: {\n    Multicall3: CONTRACTS.Multicall3.addresses[14800],\n    Multisend: CONTRACTS.Multisend.addresses[14800],\n  },\n  1480: {\n    Multicall3: CONTRACTS.Multicall3.addresses[1480],\n    Multisend: CONTRACTS.Multisend.addresses[1480],\n  },\n} as const;\n\n/**\n * Retrieves the deployed contract address for a specific Vana protocol contract on a given chain.\n */\nexport const getContractAddress = (\n  chainId: keyof typeof CONTRACT_ADDRESSES,\n  contract: VanaContractAddress,\n) => {\n  const contractAddress = CONTRACT_ADDRESSES[chainId]?.[contract] as\n    | `0x${string}`\n    | undefined;\n  if (!contractAddress) {\n    throw new Error(\n      `Contract address not found for ${contract} on chain ${chainId}`,\n    );\n  }\n  return contractAddress;\n};\n\nexport const getUtilityAddress = (\n  chainId: keyof typeof UTILITY_ADDRESSES,\n  contract: keyof (typeof UTILITY_ADDRESSES)[keyof typeof UTILITY_ADDRESSES],\n) => {\n  return UTILITY_ADDRESSES[chainId][contract] as `0x${string}`;\n};\n", "import type { Chain, Account, PublicClient, WalletClient } from \"viem\";\nimport {\n  createPublicClient,\n  http,\n  createWalletClient as viemCreateWalletClient,\n} from \"viem\";\nimport { chains, mokshaTestnet } from \"../config/chains\";\n\n/**\n * Default starting block numbers for querying blockchain events and data per chain.\n *\n * @remarks\n * These block numbers represent the earliest deployment of Vana protocol contracts\n * on each network. Using these as starting points for event queries significantly\n * improves performance by avoiding unnecessary queries of blocks before the\n * protocol existed.\n *\n * - Moksha Testnet (14800): Block 732312 - DataRegistry deployment\n * - Vana Mainnet (1480): Block 758584 - DataRegistry deployment\n *\n * @category Blockchain\n */\nexport const defaultFromBlocks: Record<number, bigint> = {\n  14800: 732312n, // Moksha Testnet - earliest contract deployment\n  1480: 758584n, // Vana Mainnet - earliest contract deployment\n};\n\n/**\n * Gets the default starting block for a specific chain.\n *\n * @param chainId - The chain ID to get the default from block for\n * @returns The default starting block for the chain, or 0n if not configured\n * @category Blockchain\n */\nexport function getDefaultFromBlock(chainId: number): bigint {\n  return defaultFromBlocks[chainId] || 0n;\n}\n\n// Cache for clients\nlet cachedClient: PublicClient & { chain: Chain };\n\n/**\n * Creates or retrieves a cached public client for blockchain read operations.\n *\n * @remarks\n * This function provides an optimized way to access blockchain data by maintaining\n * a cached client instance per chain. The client is used for reading contract state,\n * querying events, and other read-only blockchain operations. It automatically\n * handles HTTP transport configuration and chain switching.\n *\n * @param chainId - The chain ID to connect to (defaults to Moksha testnet)\n * @returns A public client configured for the specified chain with caching optimization\n * @throws {Error} When the specified chain ID is not supported by the SDK\n * @example\n * ```typescript\n * // Get client for default chain (Moksha testnet)\n * const client = createClient();\n *\n * // Get client for specific chain\n * const mainnetClient = createClient(14800);\n *\n * // Use client for blockchain reads\n * const blockNumber = await client.getBlockNumber();\n * ```\n * @category Blockchain\n */\nexport const createClient = (\n  chainId: keyof typeof chains = mokshaTestnet.id,\n): PublicClient & { chain: Chain } => {\n  if (!cachedClient || cachedClient.chain?.id !== chainId) {\n    const chain = chains[chainId];\n    if (!chain) {\n      throw new Error(`Chain ${chainId} not found`);\n    }\n\n    cachedClient = createPublicClient({\n      chain,\n      transport: http(),\n    });\n  }\n\n  return cachedClient;\n};\n\n/**\n * Creates a wallet client for blockchain transaction signing and submission.\n *\n * @remarks\n * This function creates a wallet client configured for transaction signing and\n * submission on the specified chain. Unlike the public client, wallet clients\n * are not cached and require an account for transaction signing. The client\n * handles HTTP transport configuration and provides access to wallet-specific\n * operations like signing transactions and messages.\n *\n * @param chainId - The chain ID to connect to (defaults to Moksha testnet)\n * @param account - Optional account for transaction signing (can be set later)\n * @returns A wallet client configured for the specified chain\n * @throws {Error} When the specified chain ID is not supported by the SDK\n * @example\n * ```typescript\n * import { privateKeyToAccount } from 'viem/accounts';\n *\n * // Create wallet client for default chain\n * const account = privateKeyToAccount('0x...');\n * const walletClient = createWalletClient(mokshaTestnet.id, account);\n *\n * // Use for transaction signing\n * const txHash = await walletClient.writeContract({\n *   address: contractAddress,\n *   abi: contractAbi,\n *   functionName: 'someFunction',\n *   args: []\n * });\n *\n * // Create without account (account can be set later)\n * const client = createWalletClient();\n * ```\n * @category Blockchain\n */\nexport const createWalletClient = (\n  chainId: keyof typeof chains = mokshaTestnet.id,\n  account?: Account,\n): WalletClient => {\n  const chain = chains[chainId];\n  if (!chain) {\n    throw new Error(`Chain ${chainId} not found`);\n  }\n\n  return viemCreateWalletClient({\n    chain,\n    transport: http(),\n    account,\n  });\n};\n", "/**\n * Defines the supported Vana blockchain networks and their configurations.\n *\n * @remarks\n * This module provides the canonical chain definitions for the Vana protocol.\n * Each chain configuration includes RPC endpoints, block explorers, and network\n * metadata required for SDK operations. Use these definitions when configuring\n * wallet clients or checking network compatibility.\n *\n * @category Blockchain\n * @module chains\n */\n\nimport type { Abi, Chain } from \"viem\";\nimport { defineChain } from \"viem\";\n\n/**\n * Moksha testnet configuration for development and testing.\n *\n * @remarks\n * The Moksha testnet is Vana's primary test network for application development.\n * It provides a safe environment for testing smart contracts and SDK features\n * before mainnet deployment. Test VANA tokens can be obtained from the faucet.\n *\n * **Network Details:**\n * - Chain ID: 14800\n * - Currency: Test VANA (18 decimals)\n * - RPC: https://rpc.moksha.vana.org\n * - Explorer: https://moksha.vanascan.io\n *\n * @example\n * ```typescript\n * import { createWalletClient, http } from 'viem';\n * import { mokshaTestnet } from '@opendatalabs/vana-sdk';\n *\n * const client = createWalletClient({\n *   chain: mokshaTestnet,\n *   transport: http()\n * });\n * ```\n *\n * @category Blockchain\n */\nexport const mokshaTestnet = defineChain({\n  id: 14800,\n  caipNetworkId: \"eip155:14800\",\n  chainNamespace: \"eip155\",\n  name: \"Moksha Testnet\",\n  nativeCurrency: {\n    name: \"VANA\",\n    symbol: \"VANA\",\n    decimals: 18,\n  },\n  rpcUrls: {\n    default: {\n      http: [\"https://rpc.moksha.vana.org\"],\n    },\n  },\n  blockExplorers: {\n    default: {\n      url: \"https://moksha.vanascan.io\",\n      name: \"Vanascan - Moksha\",\n    },\n    blockscout: {\n      url: \"https://moksha.vanascan.io\",\n      name: \"Vanascan - Moksha\",\n    },\n  },\n  contracts: {},\n  abis: {},\n});\n\n/**\n * Vana mainnet configuration for production deployments.\n *\n * @remarks\n * The Vana mainnet is the production network where real value transactions occur.\n * Use this chain for production applications after thorough testing on Moksha.\n * Requires real VANA tokens for gas fees and transactions.\n *\n * **Network Details:**\n * - Chain ID: 1480\n * - Currency: VANA (18 decimals)\n * - RPC: https://rpc.vana.org\n * - Explorer: https://vanascan.io\n *\n * @example\n * ```typescript\n * import { createWalletClient, http } from 'viem';\n * import { vanaMainnet } from '@opendatalabs/vana-sdk';\n *\n * const client = createWalletClient({\n *   chain: vanaMainnet,\n *   transport: http()\n * });\n * ```\n *\n * @category Blockchain\n */\nexport const vanaMainnet = defineChain({\n  id: 1480,\n  caipNetworkId: \"eip155:1480\",\n  chainNamespace: \"eip155\",\n  name: \"Vana\",\n  nativeCurrency: {\n    name: \"VANA\",\n    symbol: \"VANA\",\n    decimals: 18,\n  },\n  rpcUrls: {\n    default: {\n      http: [\"https://rpc.vana.org\"],\n    },\n  },\n  blockExplorers: {\n    default: {\n      url: \"https://vanascan.io\",\n      name: \"Vanascan\",\n    },\n    blockscout: {\n      url: \"https://vanascan.io\",\n      name: \"Vanascan\",\n    },\n  },\n  contracts: {},\n  abis: {},\n});\n\n/**\n * Maps chain IDs to their complete configurations with optional ABIs.\n *\n * @remarks\n * Extends viem's Chain type to include optional contract ABIs for each network.\n * This allows dynamic chain selection based on runtime configuration.\n *\n * @category Blockchain\n */\nexport interface Chains {\n  [key: number]: Chain & { abis?: Record<string, Abi> };\n}\n\n/**\n * Registry of all supported Vana chains indexed by chain ID.\n *\n * @remarks\n * Provides runtime access to chain configurations for dynamic network selection.\n * Use this when you need to select chains based on user input or environment variables.\n *\n * @example\n * ```typescript\n * const chainId = parseInt(process.env.CHAIN_ID || '14800');\n * const chain = chains[chainId];\n *\n * if (!chain) {\n *   throw new Error(`Unsupported chain ID: ${chainId}`);\n * }\n *\n * const client = createPublicClient({\n *   chain,\n *   transport: http()\n * });\n * ```\n *\n * @category Blockchain\n */\nexport const chains: Chains = {\n  [mokshaTestnet.id]: mokshaTestnet,\n  [vanaMainnet.id]: vanaMainnet,\n};\n", "/**\n * Default service endpoints for Vana networks\n *\n * Centralizes default service URLs for different Vana networks.\n * These can be overridden during SDK initialization.\n */\n\nexport interface ServiceEndpoints {\n  /** Block explorer URL for viewing transactions and addresses */\n  blockExplorerUrl: string;\n  /** RPC URL for blockchain interactions */\n  rpcUrl: string;\n}\n\n/**\n * Default service endpoints for Vana Mainnet (chain ID: 1480)\n */\nexport const mainnetServices: ServiceEndpoints = {\n  blockExplorerUrl: \"https://vanascan.io\",\n  rpcUrl: \"https://rpc.vana.org\",\n} as const;\n\n/**\n * Default service endpoints for Moksha Testnet (chain ID: 14800)\n */\nexport const mokshaServices: ServiceEndpoints = {\n  blockExplorerUrl: \"https://moksha.vanascan.io\",\n  rpcUrl: \"https://rpc.moksha.vana.org\",\n} as const;\n\n/**\n * Retrieves the default service endpoints for a given chain ID\n *\n * @param chainId - The numeric chain ID\n * @returns Service endpoints for the chain, or undefined if not supported\n */\nexport function getServiceEndpoints(\n  chainId: number,\n): ServiceEndpoints | undefined {\n  switch (chainId) {\n    case 1480:\n      return mainnetServices;\n    case 14800:\n      return mokshaServices;\n    default:\n      return undefined;\n  }\n}\n", "/**\n * Chain configuration definitions for Vana networks\n *\n * These provide default configurations for known Vana chains.\n * Applications can use these as-is or override specific values.\n */\n\nimport type { Chain } from \"viem\";\nimport { mainnetServices, mokshaServices } from \"../config/default-services\";\n\nexport type VanaChainConfig = Chain;\n\n/**\n * Vana Mainnet configuration\n */\nexport const vanaMainnet: VanaChainConfig = {\n  id: 1480,\n  name: \"Vana\",\n  nativeCurrency: {\n    name: \"VANA\",\n    symbol: \"VANA\",\n    decimals: 18,\n  },\n  rpcUrls: {\n    default: {\n      http: [mainnetServices.rpcUrl],\n    },\n  },\n  blockExplorers: {\n    default: {\n      name: \"Vanascan\",\n      url: mainnetServices.blockExplorerUrl,\n    },\n  },\n} as const;\n\n/**\n * Moksha Testnet configuration\n */\nexport const moksha: VanaChainConfig = {\n  id: 14800,\n  name: \"Moksha Testnet\",\n  nativeCurrency: {\n    name: \"VANA\",\n    symbol: \"VANA\",\n    decimals: 18,\n  },\n  rpcUrls: {\n    default: {\n      http: [mokshaServices.rpcUrl],\n    },\n  },\n  blockExplorers: {\n    default: {\n      name: \"Vanascan - Moksha\",\n      url: mokshaServices.blockExplorerUrl,\n    },\n  },\n} as const;\n\n/**\n * Retrieves the chain configuration for a given chain ID.\n *\n * @param chainId - The numeric chain ID to look up\n * @returns The chain configuration if found, undefined otherwise\n * @example\n * ```typescript\n * const config = getChainConfig(1480);\n * if (config) {\n *   console.log('Chain name:', config.name);\n * }\n * ```\n */\nexport function getChainConfig(chainId: number): VanaChainConfig | undefined {\n  switch (chainId) {\n    case 1480:\n      return vanaMainnet;\n    case 14800:\n      return moksha;\n    default:\n      return undefined;\n  }\n}\n\n// Backwards compatibility alias\nexport const mokshaTestnet = moksha;\n\n/**\n * Retrieves all available Vana chain configurations.\n *\n * @returns Array of all supported Vana chain configurations\n * @example\n * ```typescript\n * const chains = getAllChains();\n * console.log('Supported chains:');\n * chains.forEach(chain => {\n *   console.log(`- ${chain.name} (ID: ${chain.id})`);\n * });\n * ```\n */\nexport function getAllChains(): VanaChainConfig[] {\n  return [vanaMainnet, moksha];\n}\n", "/**\n * Defines interface for storage provider implementations.\n *\n * @remarks\n * Abstracts storage backends (IPFS, Google Drive, Pinata) behind\n * common interface for encrypted file operations.\n *\n * @category Storage\n * @example\n * ```typescript\n * class MyStorage implements StorageProvider {\n *   async upload(file: Blob): Promise<StorageUploadResult> {\n *     const url = await uploadToService(file);\n *     return { url, size: file.size, contentType: file.type };\n *   }\n *\n *   async download(url: string): Promise<Blob> {\n *     return fetch(url).then(r => r.blob());\n *   }\n * }\n * ```\n */\nexport interface StorageProvider {\n  /**\n   * Upload a file to the storage provider\n   *\n   * @param file - The file to upload\n   * @param filename - Optional custom filename\n   * @returns Promise with storage URL and metadata\n   */\n  upload(file: Blob, filename?: string): Promise<StorageUploadResult>;\n\n  /**\n   * Download a file from the storage provider\n   *\n   * @param url - The storage URL\n   * @returns Promise with file blob\n   */\n  download(url: string): Promise<Blob>;\n\n  /**\n   * List files from the storage provider\n   *\n   * @param options - Optional filtering and pagination\n   * @returns Promise with file list\n   */\n  list(options?: StorageListOptions): Promise<StorageFile[]>;\n\n  /**\n   * Delete a file from the storage provider\n   *\n   * @param url - The storage URL\n   * @returns Promise with success status\n   */\n  delete(url: string): Promise<boolean>;\n\n  /**\n   * Get provider-specific configuration\n   *\n   * @returns Provider configuration object\n   */\n  getConfig(): StorageProviderConfig;\n}\n\nexport interface StorageUploadResult {\n  /** Public URL to access the file */\n  url: string;\n  /** File size in bytes */\n  size: number;\n  /** Content type/MIME type */\n  contentType: string;\n  /** Provider-specific metadata */\n  metadata?: Record<string, unknown>;\n}\n\nexport interface StorageFile {\n  /** File identifier */\n  id: string;\n  /** File name */\n  name: string;\n  /** Public URL to access the file */\n  url: string;\n  /** File size in bytes */\n  size: number;\n  /** Content type/MIME type */\n  contentType: string;\n  /** Upload timestamp */\n  createdAt: Date;\n  /** Provider-specific metadata */\n  metadata?: Record<string, unknown>;\n}\n\nexport interface StorageListOptions {\n  /** Maximum number of files to return */\n  limit?: number;\n  /** Pagination cursor/offset */\n  offset?: string | number;\n  /** Filter by file name pattern */\n  namePattern?: string;\n  /** Filter by content type */\n  contentType?: string;\n}\n\nexport interface StorageProviderConfig {\n  /** Provider name */\n  name: string;\n  /** Provider type */\n  type: string;\n  /** Whether authentication is required */\n  requiresAuth: boolean;\n  /** Supported features */\n  features: {\n    upload: boolean;\n    download: boolean;\n    list: boolean;\n    delete: boolean;\n  };\n}\n\nexport class StorageError extends Error {\n  public readonly code: string;\n  public readonly provider: string;\n  // The 'cause' property is now inherited from the base Error class\n\n  constructor(\n    message: string,\n    code: string,\n    provider: string,\n    options?: { cause?: Error },\n  ) {\n    // Pass the options object with 'cause' to the super constructor\n    super(message, options);\n    this.name = \"StorageError\";\n    this.code = code;\n    this.provider = provider;\n  }\n}\n", "/**\n * Builder for Web3Signed Authorization headers.\n *\n * @remarks\n * Ported from `personal-server-ts`\n * (`packages/core/src/signing/request-signer.ts`). The original was wired\n * to a Node-only `ServerAccount` and `node:crypto`. This isomorphic version\n * accepts any `signMessage` callback (viem accounts, wallet clients, etc.)\n * and uses `@noble/hashes` for SHA-256 so it runs in browsers and Workers.\n *\n * Wire format is identical to PS \u2014 payload is JSON with sorted keys,\n * base64url-encoded, signed via EIP-191.\n *\n * @category Auth\n */\n\nimport { sha256 } from \"@noble/hashes/sha2\";\nimport { bytesToHex } from \"viem\";\nimport { toBase64 } from \"../utils/encoding\";\n\n/**\n * Sign-message callback compatible with viem `LocalAccount`/`WalletClient`-style\n * signers. Must produce an EIP-191 (`personal_sign`) signature.\n */\nexport type Web3SignedSignFn = (message: string) => Promise<`0x${string}`>;\n\n/** SHA-256 of the empty string \u2014 bodyHash for empty bodies. */\nconst EMPTY_BODY_HASH =\n  \"sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\";\n\n/** Default token lifetime (seconds). */\nconst DEFAULT_TTL_SECONDS = 300;\n\n/** Base64url encode bytes (no padding). */\nfunction base64urlEncode(input: Uint8Array): string {\n  return toBase64(input)\n    .replace(/\\+/g, \"-\")\n    .replace(/\\//g, \"_\")\n    .replace(/=+$/, \"\");\n}\n\n/** Compute the `sha256:<hex>` bodyHash claim for a request body. */\nexport function computeBodyHash(body: Uint8Array | undefined): string {\n  if (!body || body.length === 0) {\n    return EMPTY_BODY_HASH;\n  }\n  const digest = sha256(body);\n  return `sha256:${bytesToHex(digest).slice(2)}`;\n}\n\n/**\n * Build a Web3Signed Authorization header value.\n *\n * @returns The full header value (`\"Web3Signed <base64url>.<sig>\"`).\n */\nexport async function buildWeb3SignedHeader(params: {\n  /** EIP-191 signer (e.g. viem `account.signMessage`). */\n  signMessage: Web3SignedSignFn;\n  /** Expected origin (e.g. `\"https://ps.example.com\"`). */\n  aud: string;\n  /** HTTP method (e.g. `\"GET\"`). */\n  method: string;\n  /** Request URI/path (e.g. `\"/v1/data/instagram.profile\"`). */\n  uri: string;\n  /** Optional request body \u2014 when present, used to compute `bodyHash`. */\n  body?: Uint8Array;\n  /** Issued-at (unix seconds). Defaults to now. */\n  iat?: number;\n  /** Expiry (unix seconds). Defaults to `iat + 300`. */\n  exp?: number;\n  /** Optional grant id, attached as the `grantId` claim. */\n  grantId?: string;\n  /**\n   * Optional uniqueness claim, attached as the `nonce` claim (a uuid is the\n   * intended shape; the Personal Server bounds it at 128 characters).\n   *\n   * @remarks\n   * A payload is otherwise fully determined by\n   * `{ aud, bodyHash, exp, grantId, iat, method, uri }`, so two identical\n   * requests signed inside the same second produce the same bytes and the\n   * Personal Server refuses the second as a replay. With a nonce the replay\n   * key becomes `(signer, nonce)` instead, which is what lets a poll loop\n   * send the same request twice. The nonce is then single use itself:\n   * re-using one is a replay even when the rest of the payload changed.\n   */\n  nonce?: string;\n  /** Pre-computed `bodyHash` claim \u2014 overrides `body`. */\n  bodyHash?: string;\n}): Promise<string> {\n  const now = Math.floor(Date.now() / 1000);\n  const iat = params.iat ?? now;\n  const exp = params.exp ?? iat + DEFAULT_TTL_SECONDS;\n\n  const payload: Record<string, unknown> = {\n    aud: params.aud,\n    bodyHash: params.bodyHash ?? computeBodyHash(params.body),\n    exp,\n    iat,\n    method: params.method,\n    uri: params.uri,\n  };\n\n  if (params.grantId !== undefined) {\n    payload[\"grantId\"] = params.grantId;\n  }\n\n  // Merged before the sort, so the nonce sits in its alphabetical place like\n  // every other claim and the payload stays deterministic.\n  if (params.nonce !== undefined) {\n    payload[\"nonce\"] = params.nonce;\n  }\n\n  // Sort keys for deterministic serialization.\n  const sortedPayload = Object.keys(payload)\n    .sort()\n    .reduce<Record<string, unknown>>((acc, key) => {\n      acc[key] = payload[key];\n      return acc;\n    }, {});\n\n  const payloadJson = JSON.stringify(sortedPayload);\n  const payloadBytes = new TextEncoder().encode(payloadJson);\n  const payloadBase64 = base64urlEncode(payloadBytes);\n\n  const signature = await params.signMessage(payloadBase64);\n\n  return `Web3Signed ${payloadBase64}.${signature}`;\n}\n", "/**\n * Provides platform-aware base64 encoding utilities.\n *\n * @remarks\n * This module provides base64 encoding/decoding operations across Node.js and browser\n * environments. For hex and string conversions, use viem's utilities directly:\n * - `toHex` / `fromHex` from 'viem'\n * - `stringToBytes` / `bytesToString` from 'viem'\n *\n * @category Utilities\n */\n\n/**\n * Converts a Uint8Array to a base64 string.\n *\n * @param data - The byte array to encode into base64 format.\n * @returns The base64-encoded string representation.\n * @throws {Error} When no base64 encoding method is available in the environment.\n *\n * @example\n * ```typescript\n * const bytes = new Uint8Array([72, 101, 108, 108, 111]);\n * const encoded = toBase64(bytes);\n * console.log(encoded); // \"SGVsbG8=\"\n * ```\n */\nexport function toBase64(data: Uint8Array): string {\n  // Node.js path - most efficient\n  if (typeof Buffer !== \"undefined\" && Buffer.from) {\n    return Buffer.from(data).toString(\"base64\");\n  }\n\n  // Browser path - using native btoa\n  if (typeof btoa !== \"undefined\") {\n    const binary = Array.from(data, (byte) => String.fromCharCode(byte)).join(\n      \"\",\n    );\n    return btoa(binary);\n  }\n\n  throw new Error(\"No base64 encoding method available in this environment\");\n}\n\n/**\n * Converts a base64 string to a Uint8Array.\n *\n * @param str - The base64-encoded string to decode.\n * @returns The decoded byte array.\n * @throws {Error} When no base64 decoding method is available in the environment.\n *\n * @example\n * ```typescript\n * const decoded = fromBase64(\"SGVsbG8=\");\n * console.log(new TextDecoder().decode(decoded)); // \"Hello\"\n * ```\n */\nexport function fromBase64(str: string): Uint8Array {\n  // Node.js path - most efficient\n  if (typeof Buffer !== \"undefined\" && Buffer.from) {\n    return new Uint8Array(Buffer.from(str, \"base64\"));\n  }\n\n  // Browser path - using native atob\n  if (typeof atob !== \"undefined\") {\n    const binary = atob(str);\n    const bytes = new Uint8Array(binary.length);\n    for (let i = 0; i < binary.length; i++) {\n      bytes[i] = binary.charCodeAt(i);\n    }\n    return bytes;\n  }\n\n  throw new Error(\"No base64 decoding method available in this environment\");\n}\n\n/**\n * Type guard to check if running in Node.js environment\n *\n * @returns True if running in Node.js\n */\nexport function isNodeEnvironment(): boolean {\n  return (\n    typeof Buffer !== \"undefined\" &&\n    typeof Buffer.from === \"function\" &&\n    typeof process !== \"undefined\" &&\n    process.versions?.node !== undefined\n  );\n}\n\n/**\n * Type guard to check if running in browser environment\n *\n * @returns True if running in browser\n */\nexport function isBrowserEnvironment(): boolean {\n  return (\n    typeof window !== \"undefined\" && typeof window.document !== \"undefined\"\n  );\n}\n", "/**\n * Vana protocol networks known to this SDK release.\n *\n * The network name is the ergonomic public API; the chain ID is the protocol\n * namespace used by chain-scoped services such as storage and escrow.\n *\n * @category Protocol\n */\nexport type ProtocolNetwork = \"mainnet\" | \"moksha\";\n\nconst PROTOCOL_NETWORK_CHAIN_IDS: Record<ProtocolNetwork, number> = {\n  mainnet: 1480,\n  moksha: 14800,\n};\n\nexport function isProtocolNetwork(value: unknown): value is ProtocolNetwork {\n  return (\n    typeof value === \"string\" &&\n    Object.hasOwn(PROTOCOL_NETWORK_CHAIN_IDS, value)\n  );\n}\n\nexport function getProtocolNetworkChainId(network: ProtocolNetwork): number {\n  if (!isProtocolNetwork(network)) {\n    throw new Error(`Unsupported Vana protocol network: ${String(network)}`);\n  }\n  return PROTOCOL_NETWORK_CHAIN_IDS[network];\n}\n", "/**\n * Tolerant JSON body readers for `fetch` responses.\n *\n * A response body can legitimately be empty (204), non-JSON (an HTML error\n * page from a proxy), or JSON that is not an object (`null`, an array, a\n * string). Every SDK code path that indexes into a parsed body must go\n * through these helpers so those shapes degrade to \"no fields\" instead of a\n * `TypeError` that bypasses the typed error the caller expects.\n *\n * @internal\n */\n\n/** The one method the readers need, so custom fetch shims qualify too. */\nexport type JsonBodySource = Pick<Response, \"json\">;\n\n/** True for a non-null, non-array object -- the only shape safe to index. */\nexport function isPlainObject(\n  value: unknown,\n): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * Parse the body as JSON. Resolves `null` when the body is empty or not\n * valid JSON. Never throws.\n */\nexport async function readJsonValue(res: JsonBodySource): Promise<unknown> {\n  try {\n    return (await res.json()) as unknown;\n  } catch {\n    return null;\n  }\n}\n\n/**\n * Parse the body as JSON and return it only when it is a plain object;\n * every other shape (empty, non-JSON, `null`, array, primitive) becomes `{}`.\n * Never throws.\n */\nexport async function readJsonObject(\n  res: JsonBodySource,\n): Promise<Record<string, unknown>> {\n  const value = await readJsonValue(res);\n  return isPlainObject(value) ? value : {};\n}\n", "import {\n  StorageError,\n  type StorageProvider,\n  type StorageUploadResult,\n  type StorageFile,\n  type StorageListOptions,\n  type StorageProviderConfig,\n} from \"../index\";\nimport {\n  buildWeb3SignedHeader,\n  type Web3SignedSignFn,\n} from \"../../auth/web3-signed-builder\";\nimport {\n  getProtocolNetworkChainId,\n  isProtocolNetwork,\n  type ProtocolNetwork,\n} from \"../../protocol/networks\";\nimport { readJsonObject } from \"../../utils/response-body\";\n\nconst DEFAULT_ENDPOINT = \"https://storage.vana.org\";\nconst LEGACY_BLOB_PATH_PREFIX = \"/v1/blobs\";\nconst DEFAULT_TOKEN_TTL_SECONDS = 300;\nconst MAX_UPLOAD_ATTEMPTS = 4;\nconst MAX_RATE_LIMIT_DELAY_MS = 30_000;\n\n/**\n * Wallet-style signer used by {@link VanaStorage} to authenticate every\n * request. For Personal Server flows this can be a registered server wallet\n * signing requests for the owner's storage namespace.\n *\n * @category Storage\n */\nexport interface VanaStorageSigner {\n  /** EIP-191 address (`0x...`). */\n  address: `0x${string}`;\n  /** EIP-191 personal_sign callback (e.g. viem `account.signMessage`). */\n  signMessage: Web3SignedSignFn;\n}\n\n/**\n * Configuration for {@link VanaStorage}.\n *\n * @category Storage\n */\nexport interface VanaStorageConfig {\n  /**\n   * Base URL of the vana-storage Worker. Defaults to `https://storage.vana.org`.\n   *\n   * This selects the storage endpoint and is independent of {@link network} /\n   * {@link chainId}.\n   */\n  endpoint?: string;\n  /**\n   * Named Vana protocol network that scopes blob paths. Prefer this for known\n   * Vana networks because it keeps callers on the SDK's typed network registry.\n   *\n   * When set, uploads use chain-scoped routes derived from the network's chain\n   * ID (`/v1/chains/1480/...` for mainnet, `/v1/chains/14800/...` for Moksha).\n   */\n  network?: ProtocolNetwork;\n  /**\n   * Explicit numeric chain ID for custom or future networks not yet represented\n   * by {@link ProtocolNetwork}.\n   *\n   * When set, uploads use chain-scoped routes\n   * (`/v1/chains/{chainId}/blobs/...`) so data for different chains under the\n   * same owner/scope/timestamp never collides. Reads and deletes must use the\n   * same chain-scoped namespace; legacy blobs should be migrated or re-collected\n   * rather than read through an ambiguous fallback. When omitted, the provider\n   * preserves the legacy `/v1/blobs/...` routes and behavior.\n   *\n   * `chainId` and {@link network} are mutually consistent ways to select the\n   * namespace. If both are provided, they must resolve to the same chain ID.\n   * `endpoint` remains orthogonal: it picks the storage host, not the protocol\n   * namespace.\n   */\n  chainId?: number;\n  /**\n   * Wallet signer used to authenticate writes and reads.\n   */\n  signer: VanaStorageSigner;\n  /**\n   * Owner namespace under which blobs are stored. Defaults to the signer address.\n   */\n  ownerAddress?: `0x${string}`;\n  /**\n   * Optional `fetch` implementation. Defaults to the global `fetch`.\n   * Useful for tests and for environments that need a custom HTTP client.\n   */\n  fetchImpl?: typeof fetch;\n}\n\ninterface VanaStorageUploadResponse {\n  key: string;\n  url: string;\n  etag: string;\n  size: number;\n}\n\n/**\n * Response of {@link VanaStorage.deleteScope} -- the worker's\n * `DELETE /:owner/:scope` body. `count` is the number of blobs removed (0 is\n * a success: nothing was stored under that scope).\n *\n * @category Storage\n */\nexport interface VanaStorageScopeDeleteResult {\n  deleted: boolean;\n  scope: string;\n  count: number;\n  totalBytes: number;\n}\n\n/**\n * Storage provider that talks to the vana-storage Worker\n * (`https://storage.vana.org` by default). All requests are authenticated\n * with Web3Signed headers signed by the configured wallet.\n *\n * @remarks\n * Filenames passed to {@link VanaStorage.upload} must be of the form\n * `\"{scope}/{collectedAt}\"` (e.g. `\"instagram.profile/2026-05-08T20:00:00.000Z\"`).\n * The owner address is prepended automatically to produce the canonical\n * blob path `/v1/blobs/{owner}/{scope}/{collectedAt}`.\n *\n * When {@link VanaStorageConfig.network} or {@link VanaStorageConfig.chainId}\n * is set, paths are chain-scoped as\n * `/v1/chains/{chainId}/blobs/{owner}/{scope}/{collectedAt}` so different chains\n * never collide on the same host. The Web3Signed audience remains the endpoint\n * origin regardless of network.\n *\n * @category Storage\n *\n * @example\n * ```typescript\n * import { privateKeyToAccount } from \"viem/accounts\";\n * import { VanaStorage } from \"@opendatalabs/vana-sdk/node\";\n *\n * const account = privateKeyToAccount(process.env.PRIVATE_KEY as `0x${string}`);\n * const storage = new VanaStorage({\n *   signer: {\n *     address: account.address,\n *     signMessage: (msg) => account.signMessage({ message: msg }),\n *   },\n * });\n *\n * const result = await storage.upload(\n *   new Blob([ciphertext]),\n *   \"instagram.profile/2026-05-08T20:00:00.000Z\",\n * );\n * ```\n */\nexport class VanaStorage implements StorageProvider {\n  private readonly endpoint: string;\n  private readonly network?: ProtocolNetwork;\n  private readonly chainId?: number;\n  private readonly blobPathPrefix: string;\n  private readonly signer: VanaStorageSigner;\n  private readonly ownerAddress: string;\n  private readonly fetchImpl: typeof fetch;\n\n  constructor(config: VanaStorageConfig) {\n    if (!config?.signer?.address || !config?.signer?.signMessage) {\n      throw new StorageError(\n        \"VanaStorage requires a signer with address and signMessage\",\n        \"MISSING_SIGNER\",\n        \"vana-storage\",\n      );\n    }\n    this.endpoint = (config.endpoint ?? DEFAULT_ENDPOINT).replace(/\\/+$/, \"\");\n    const resolved = resolveStorageNamespace(config);\n    this.network = resolved.network;\n    this.chainId = resolved.chainId;\n    this.blobPathPrefix =\n      this.chainId !== undefined\n        ? `/v1/chains/${this.chainId}/blobs`\n        : LEGACY_BLOB_PATH_PREFIX;\n    this.signer = config.signer;\n    this.ownerAddress = (\n      config.ownerAddress ?? config.signer.address\n    ).toLowerCase();\n    this.fetchImpl = config.fetchImpl ?? globalThis.fetch.bind(globalThis);\n  }\n\n  /**\n   * Upload an encrypted blob to vana-storage.\n   *\n   * @param file - The blob to upload.\n   * @param filename - Required relative key in the form `\"{scope}/{collectedAt}\"`.\n   *   The owner address is prepended automatically.\n   */\n  async upload(file: Blob, filename?: string): Promise<StorageUploadResult> {\n    if (!filename) {\n      throw new StorageError(\n        \"VanaStorage.upload requires a filename of the form '{scope}/{collectedAt}'\",\n        \"MISSING_FILENAME\",\n        \"vana-storage\",\n      );\n    }\n\n    const subpath = encodeRelativePath(filename);\n    const path = `${this.blobPathPrefix}/${this.ownerAddress}/${subpath}`;\n    const body = new Uint8Array(await file.arrayBuffer());\n    const contentType =\n      file.type !== \"\" ? file.type : \"application/octet-stream\";\n\n    const header = await this.signRequest(\"PUT\", path, body);\n\n    let response: Response | null = null;\n    let responseText = \"\";\n    for (let attempt = 1; attempt <= MAX_UPLOAD_ATTEMPTS; attempt++) {\n      try {\n        response = await this.fetchImpl(`${this.endpoint}${path}`, {\n          method: \"PUT\",\n          headers: {\n            authorization: header,\n            \"content-type\": contentType,\n          },\n          body,\n        });\n      } catch (cause) {\n        throw new StorageError(\n          `vana-storage upload network error: ${describe(cause)}`,\n          \"UPLOAD_ERROR\",\n          \"vana-storage\",\n          { cause: cause instanceof Error ? cause : undefined },\n        );\n      }\n\n      if (response.ok) {\n        break;\n      }\n\n      responseText = await safeText(response);\n      if (response.status === 429 && attempt < MAX_UPLOAD_ATTEMPTS) {\n        const delayMs = retryDelayMs(response, responseText);\n        if (delayMs > 0) {\n          await sleep(delayMs);\n        }\n        continue;\n      }\n\n      throw new StorageError(\n        `vana-storage upload failed: ${response.status} ${response.statusText} - ${responseText}`,\n        \"UPLOAD_FAILED\",\n        \"vana-storage\",\n      );\n    }\n\n    if (!response?.ok) {\n      throw new StorageError(\n        `vana-storage upload failed after ${MAX_UPLOAD_ATTEMPTS} attempts - ${responseText}`,\n        \"UPLOAD_FAILED\",\n        \"vana-storage\",\n      );\n    }\n\n    const result = (await response.json()) as VanaStorageUploadResponse;\n    return {\n      url: result.url,\n      size: result.size,\n      contentType,\n      metadata: { key: result.key, etag: result.etag },\n    };\n  }\n\n  /**\n   * Download a blob by URL. The URL must point at a path under this\n   * provider's endpoint.\n   */\n  async download(url: string): Promise<Blob> {\n    const path = this.pathFromUrl(url);\n    const header = await this.signRequest(\"GET\", path);\n\n    let response: Response;\n    try {\n      response = await this.fetchImpl(`${this.endpoint}${path}`, {\n        method: \"GET\",\n        headers: { authorization: header },\n      });\n    } catch (cause) {\n      throw new StorageError(\n        `vana-storage download network error: ${describe(cause)}`,\n        \"DOWNLOAD_ERROR\",\n        \"vana-storage\",\n        { cause: cause instanceof Error ? cause : undefined },\n      );\n    }\n\n    if (!response.ok) {\n      throw new StorageError(\n        `vana-storage download failed: ${response.status} ${response.statusText}`,\n        \"DOWNLOAD_FAILED\",\n        \"vana-storage\",\n      );\n    }\n\n    return await response.blob();\n  }\n\n  /**\n   * Listing is not supported by vana-storage \u2014 file discovery is handled by\n   * the Gateway DataRegistry, not the storage layer.\n   */\n  async list(_options?: StorageListOptions): Promise<StorageFile[]> {\n    throw new StorageError(\n      \"list is not supported by vana-storage; query the Gateway DataRegistry instead\",\n      \"NOT_IMPLEMENTED\",\n      \"vana-storage\",\n    );\n  }\n\n  async delete(url: string): Promise<boolean> {\n    const path = this.pathFromUrl(url);\n    const header = await this.signRequest(\"DELETE\", path);\n\n    let response: Response;\n    try {\n      response = await this.fetchImpl(`${this.endpoint}${path}`, {\n        method: \"DELETE\",\n        headers: { authorization: header },\n      });\n    } catch (cause) {\n      throw new StorageError(\n        `vana-storage delete network error: ${describe(cause)}`,\n        \"DELETE_ERROR\",\n        \"vana-storage\",\n        { cause: cause instanceof Error ? cause : undefined },\n      );\n    }\n\n    if (response.status === 404) return false;\n    if (!response.ok) {\n      throw new StorageError(\n        `vana-storage delete failed: ${response.status} ${response.statusText}`,\n        \"DELETE_FAILED\",\n        \"vana-storage\",\n      );\n    }\n    return true;\n  }\n\n  /**\n   * Delete every version's blob under `(owner, scope)` --\n   * `DELETE {prefix}/{owner}/{scope}` on vana-storage, signed with the same\n   * Web3Signed header as uploads (aud = endpoint origin, empty bodyHash).\n   * The worker accepts the owner's own signature or a personal server the\n   * owner registered with the gateway.\n   *\n   * @param ownerAddress - Must equal the provider's configured owner; a\n   *   mismatch throws before anything is signed so this wallet can never be\n   *   induced to sign a delete for another namespace.\n   * @param scope - The scope segment, e.g. `\"instagram.profile\"`.\n   */\n  async deleteScope(\n    ownerAddress: `0x${string}`,\n    scope: string,\n  ): Promise<VanaStorageScopeDeleteResult> {\n    if (ownerAddress.toLowerCase() !== this.ownerAddress) {\n      throw new StorageError(\n        `deleteScope owner '${ownerAddress}' does not match the configured owner '${this.ownerAddress}'`,\n        \"INVALID_OWNER\",\n        \"vana-storage\",\n      );\n    }\n    if (\n      scope.length === 0 ||\n      scope.includes(\"/\") ||\n      isTraversalSegment(scope)\n    ) {\n      throw new StorageError(\n        `scope must be a single non-empty path segment, got '${scope}'`,\n        \"INVALID_SCOPE\",\n        \"vana-storage\",\n      );\n    }\n\n    const path = `${this.blobPathPrefix}/${this.ownerAddress}/${encodeURIComponent(scope)}`;\n    const header = await this.signRequest(\"DELETE\", path);\n\n    let response: Response;\n    try {\n      response = await this.fetchImpl(`${this.endpoint}${path}`, {\n        method: \"DELETE\",\n        headers: { authorization: header },\n      });\n    } catch (cause) {\n      throw new StorageError(\n        `vana-storage scope delete network error: ${describe(cause)}`,\n        \"DELETE_ERROR\",\n        \"vana-storage\",\n        { cause: cause instanceof Error ? cause : undefined },\n      );\n    }\n\n    if (!response.ok) {\n      const responseText = await safeText(response);\n      throw new StorageError(\n        `vana-storage scope delete failed: ${response.status} ${response.statusText} - ${responseText}`,\n        \"DELETE_FAILED\",\n        \"vana-storage\",\n      );\n    }\n\n    // A 2xx is the success signal; the body is informational. Tolerate an\n    // empty 204, a non-JSON body, or a JSON `null`/array, and only trust\n    // fields that carry the documented type.\n    const body = await readJsonObject(response);\n    return {\n      deleted: typeof body[\"deleted\"] === \"boolean\" ? body[\"deleted\"] : true,\n      scope: typeof body[\"scope\"] === \"string\" ? body[\"scope\"] : scope,\n      count: nonNegativeInteger(body[\"count\"]) ?? 0,\n      totalBytes: nonNegativeInteger(body[\"totalBytes\"]) ?? 0,\n    };\n  }\n\n  getConfig(): StorageProviderConfig {\n    return {\n      name: \"vana-storage\",\n      type: \"vana-storage\",\n      requiresAuth: true,\n      features: {\n        upload: true,\n        download: true,\n        list: false,\n        delete: true,\n      },\n    };\n  }\n\n  private async signRequest(\n    method: \"GET\" | \"PUT\" | \"DELETE\",\n    path: string,\n    body?: Uint8Array,\n  ): Promise<string> {\n    const now = Math.floor(Date.now() / 1000);\n    return buildWeb3SignedHeader({\n      signMessage: this.signer.signMessage,\n      aud: this.endpoint,\n      method,\n      uri: path,\n      iat: now,\n      exp: now + DEFAULT_TOKEN_TTL_SECONDS,\n      ...(body !== undefined && body.length > 0 && { body }),\n    });\n  }\n\n  private pathFromUrl(url: string): string {\n    let parsed: URL;\n    try {\n      parsed = new URL(url);\n    } catch {\n      throw new StorageError(\n        `Invalid URL: ${url}`,\n        \"INVALID_URL\",\n        \"vana-storage\",\n      );\n    }\n    const expectedHost = new URL(this.endpoint).host;\n    if (parsed.host !== expectedHost) {\n      throw new StorageError(\n        `URL host '${parsed.host}' does not match storage endpoint '${expectedHost}'`,\n        \"INVALID_URL\",\n        \"vana-storage\",\n      );\n    }\n    // Restrict to a blob path for this owner so a caller cannot induce this\n    // wallet to sign arbitrary same-host paths.\n    const route = parseBlobPath(parsed.pathname);\n    if (!route || route.owner.toLowerCase() !== this.ownerAddress) {\n      throw new StorageError(\n        `URL path '${parsed.pathname}' must be ${this.blobPathPrefix}/${this.ownerAddress}/{scope}/{collectedAt}`,\n        \"INVALID_URL\",\n        \"vana-storage\",\n      );\n    }\n    // A provider must only sign requests for its configured namespace. Chain\n    // mode is strict: old legacy blobs should be migrated or re-collected\n    // rather than read through a second ambiguous path.\n    if (route.chainId !== this.chainId) {\n      throw new StorageError(\n        `URL chainId '${route.chainId ?? \"legacy\"}' does not match provider namespace '${this.namespaceDescription()}'`,\n        \"INVALID_URL\",\n        \"vana-storage\",\n      );\n    }\n    return parsed.pathname;\n  }\n\n  private namespaceDescription(): string {\n    if (this.network !== undefined) {\n      return `${this.network} (${this.chainId})`;\n    }\n    return this.chainId === undefined ? \"legacy\" : String(this.chainId);\n  }\n}\n\ninterface ParsedBlobRoute {\n  chainId?: number;\n  owner: string;\n  scope: string;\n  collectedAt: string;\n}\n\nfunction isValidChainId(value: unknown): value is number {\n  return typeof value === \"number\" && Number.isInteger(value) && value > 0;\n}\n\nfunction resolveStorageNamespace(\n  config: Pick<VanaStorageConfig, \"network\" | \"chainId\">,\n): {\n  chainId?: number;\n  network?: ProtocolNetwork;\n} {\n  if (config.network !== undefined && !isProtocolNetwork(config.network)) {\n    throw new StorageError(\n      `Unsupported vana-storage network '${String(config.network)}'`,\n      \"INVALID_NETWORK\",\n      \"vana-storage\",\n    );\n  }\n\n  if (config.chainId !== undefined && !isValidChainId(config.chainId)) {\n    throw new StorageError(\n      `Unsupported vana-storage chainId '${String(config.chainId)}'`,\n      \"INVALID_CHAIN_ID\",\n      \"vana-storage\",\n    );\n  }\n\n  if (config.network === undefined) {\n    return { chainId: config.chainId };\n  }\n\n  const networkChainId = getProtocolNetworkChainId(config.network);\n  if (config.chainId !== undefined && config.chainId !== networkChainId) {\n    throw new StorageError(\n      `vana-storage network '${config.network}' resolves to chainId '${networkChainId}', not '${config.chainId}'`,\n      \"INVALID_CHAIN_ID\",\n      \"vana-storage\",\n    );\n  }\n\n  return { chainId: networkChainId, network: config.network };\n}\n\n/**\n * Parse a storage blob pathname into structured route info, or `null` when the\n * path is neither the legacy nor the chain-scoped blob shape. Traversal\n * segments (`.` / `..`) are rejected as invalid.\n */\nfunction parseBlobPath(pathname: string): ParsedBlobRoute | null {\n  const segments = pathname.split(\"/\").filter((s) => s.length > 0);\n  const isTraversal = (s: string): boolean => s === \".\" || s === \"..\";\n\n  // Legacy: /v1/blobs/{owner}/{scope}/{collectedAt}\n  if (\n    segments.length === 5 &&\n    segments[0] === \"v1\" &&\n    segments[1] === \"blobs\"\n  ) {\n    const [, , owner, scope, collectedAt] = segments as [\n      string,\n      string,\n      string,\n      string,\n      string,\n    ];\n    if (isTraversal(scope) || isTraversal(collectedAt)) return null;\n    return { owner, scope, collectedAt };\n  }\n\n  // Chain-scoped: /v1/chains/{chainId}/blobs/{owner}/{scope}/{collectedAt}\n  if (\n    segments.length === 7 &&\n    segments[0] === \"v1\" &&\n    segments[1] === \"chains\" &&\n    segments[3] === \"blobs\"\n  ) {\n    const [, , chainIdSegment, , owner, scope, collectedAt] = segments as [\n      string,\n      string,\n      string,\n      string,\n      string,\n      string,\n      string,\n    ];\n    if (!/^[0-9]+$/.test(chainIdSegment)) return null;\n    const chainId = Number(chainIdSegment);\n    if (!isValidChainId(chainId)) return null;\n    if (isTraversal(scope) || isTraversal(collectedAt)) return null;\n    return { chainId, owner, scope, collectedAt };\n  }\n\n  return null;\n}\n\nfunction encodeRelativePath(filename: string): string {\n  const parts = filename.split(\"/\");\n  if (\n    parts.length !== 2 ||\n    parts.some((p) => p.length === 0 || p === \".\" || p === \"..\")\n  ) {\n    throw new StorageError(\n      `filename must be exactly '{scope}/{collectedAt}' with non-empty segments, got '${filename}'`,\n      \"INVALID_FILENAME\",\n      \"vana-storage\",\n    );\n  }\n  return parts.map((p) => encodeURIComponent(p)).join(\"/\");\n}\n\nfunction isTraversalSegment(segment: string): boolean {\n  return segment === \".\" || segment === \"..\";\n}\n\nfunction nonNegativeInteger(value: unknown): number | undefined {\n  return typeof value === \"number\" && Number.isInteger(value) && value >= 0\n    ? value\n    : undefined;\n}\n\nfunction describe(value: unknown): string {\n  if (value instanceof Error) return value.message;\n  return String(value);\n}\n\nfunction retryDelayMs(response: Response, responseText: string): number {\n  const headerDelayMs = parseRetryAfterHeaderMs(\n    response.headers.get(\"retry-after\"),\n  );\n  if (headerDelayMs !== null) {\n    return clampRateLimitDelay(headerDelayMs);\n  }\n\n  return clampRateLimitDelay(parseRetryAfterBodyMs(responseText) ?? 0);\n}\n\nfunction parseRetryAfterHeaderMs(value: string | null): number | null {\n  if (!value) return null;\n\n  const seconds = Number(value);\n  if (Number.isFinite(seconds)) {\n    return seconds * 1000;\n  }\n\n  const dateMs = Date.parse(value);\n  if (Number.isFinite(dateMs)) {\n    return Math.max(0, dateMs - Date.now());\n  }\n\n  return null;\n}\n\nfunction parseRetryAfterBodyMs(responseText: string): number | null {\n  if (!responseText) return null;\n\n  try {\n    const parsed = JSON.parse(responseText) as { retryAfter?: unknown };\n    const seconds = Number(parsed.retryAfter);\n    return Number.isFinite(seconds) ? seconds * 1000 : null;\n  } catch {\n    return null;\n  }\n}\n\nfunction clampRateLimitDelay(delayMs: number): number {\n  return Math.min(Math.max(0, delayMs), MAX_RATE_LIMIT_DELAY_MS);\n}\n\nfunction sleep(ms: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nasync function safeText(response: Response): Promise<string> {\n  try {\n    return await response.text();\n  } catch {\n    return \"\";\n  }\n}\n", "import type { StorageProvider } from \"../types/storage\";\nimport { VanaStorage, type VanaStorageConfig } from \"./providers/vana-storage\";\n\nexport type VanaStorageProviderOptions = VanaStorageConfig;\n\nexport function createVanaStorageProvider(\n  options: VanaStorageProviderOptions,\n): StorageProvider {\n  return new VanaStorage(options);\n}\n", "import { hmac } from \"@noble/hashes/hmac\";\nimport { sha256 } from \"@noble/hashes/sha2\";\n\nimport {\n  StorageError,\n  type StorageProvider,\n  type StorageUploadResult,\n  type StorageFile,\n  type StorageListOptions,\n  type StorageProviderConfig,\n} from \"../index\";\n\n/**\n * Configuration for {@link R2Storage}.\n *\n * @category Storage\n */\nexport interface R2Config {\n  /** Cloudflare account ID. Used to derive the S3 endpoint when `endpoint` is not given. */\n  accountId?: string;\n  /**\n   * Full S3 endpoint URL. Overrides `accountId`.\n   *\n   * Defaults to `https://{accountId}.r2.cloudflarestorage.com`.\n   */\n  endpoint?: string;\n  /** R2 access key ID. */\n  accessKeyId: string;\n  /** R2 secret access key. */\n  secretAccessKey: string;\n  /** Bucket name. */\n  bucket: string;\n  /**\n   * Public URL prefix used when constructing the URL returned by {@link R2Storage.upload}.\n   *\n   * If unset, defaults to `https://{bucket}.{accountId}.r2.dev` (R2's default public hostname).\n   * Set this to a custom domain bound to the bucket if you have one.\n   */\n  publicUrl?: string;\n  /**\n   * S3 region. R2 expects `auto`; consumers can override for compatibility with other\n   * S3-compatible stores reachable through the same code path.\n   */\n  region?: string;\n}\n\ninterface SignedRequest {\n  url: string;\n  headers: Record<string, string>;\n}\n\nconst SERVICE = \"s3\";\nconst DEFAULT_REGION = \"auto\";\n\n/**\n * Cloudflare R2 storage provider.\n *\n * @remarks\n * Uses R2's S3-compatible API with SigV4 signed `fetch` requests, so the same\n * implementation runs in browsers, Node.js, and Workers without pulling in\n * `@aws-sdk/client-s3`. Treats blobs as opaque - encryption, access control,\n * and per-tenant prefixing are out of scope and live in higher layers.\n *\n * The SDK exposes R2 as the recommended default backend. Other providers\n * (Pinata, IPFS, Google Drive, Dropbox, CallbackStorage) remain available for\n * teams that need IPFS semantics or user-owned storage.\n *\n * @category Storage\n *\n * @example\n * ```typescript\n * import { R2Storage, StorageManager } from \"@opendatalabs/vana-sdk/node\";\n *\n * const storage = new StorageManager();\n * storage.register(\n *   \"r2\",\n *   new R2Storage({\n *     accountId: process.env.R2_ACCOUNT_ID!,\n *     accessKeyId: process.env.R2_ACCESS_KEY_ID!,\n *     secretAccessKey: process.env.R2_SECRET_ACCESS_KEY!,\n *     bucket: process.env.R2_BUCKET!,\n *     publicUrl: \"https://files.example.com\",\n *   }),\n *   true,\n * );\n *\n * const result = await storage.upload(myBlob, \"report.json\");\n * console.log(result.url);\n * ```\n */\nexport class R2Storage implements StorageProvider {\n  private readonly endpoint: string;\n  private readonly publicUrl: string;\n  private readonly region: string;\n  private readonly bucket: string;\n\n  constructor(private readonly config: R2Config) {\n    if (!config.accessKeyId) {\n      throw new StorageError(\n        \"R2 accessKeyId is required\",\n        \"MISSING_ACCESS_KEY\",\n        \"r2\",\n      );\n    }\n    if (!config.secretAccessKey) {\n      throw new StorageError(\n        \"R2 secretAccessKey is required\",\n        \"MISSING_SECRET_KEY\",\n        \"r2\",\n      );\n    }\n    if (!config.bucket) {\n      throw new StorageError(\"R2 bucket is required\", \"MISSING_BUCKET\", \"r2\");\n    }\n    if (!config.endpoint && !config.accountId) {\n      throw new StorageError(\n        \"R2 endpoint or accountId is required\",\n        \"MISSING_ENDPOINT\",\n        \"r2\",\n      );\n    }\n    if (!config.publicUrl && !config.accountId) {\n      throw new StorageError(\n        \"R2 publicUrl is required when accountId is not provided\",\n        \"MISSING_PUBLIC_URL\",\n        \"r2\",\n      );\n    }\n\n    this.bucket = config.bucket;\n    this.region = config.region ?? DEFAULT_REGION;\n    this.endpoint = (\n      config.endpoint ?? `https://${config.accountId}.r2.cloudflarestorage.com`\n    ).replace(/\\/$/, \"\");\n    this.publicUrl = (\n      config.publicUrl ?? `https://${config.bucket}.${config.accountId}.r2.dev`\n    ).replace(/\\/$/, \"\");\n  }\n\n  async upload(file: Blob, filename?: string): Promise<StorageUploadResult> {\n    const key = filename ?? `vana-${Date.now()}-${randomSuffix()}.dat`;\n    const body = new Uint8Array(await file.arrayBuffer());\n    const contentType =\n      file.type !== \"\" ? file.type : \"application/octet-stream\";\n\n    try {\n      const signed = await this.signRequest({\n        method: \"PUT\",\n        path: `/${this.bucket}/${encodePath(key)}`,\n        body,\n        extraHeaders: { \"content-type\": contentType },\n      });\n\n      const response = await fetch(signed.url, {\n        method: \"PUT\",\n        headers: signed.headers,\n        body,\n      });\n\n      if (!response.ok) {\n        throw new StorageError(\n          `R2 upload failed: ${response.status} ${response.statusText} - ${await safeText(response)}`,\n          \"UPLOAD_FAILED\",\n          \"r2\",\n        );\n      }\n\n      return {\n        url: `${this.publicUrl}/${encodePath(key)}`,\n        size: file.size,\n        contentType,\n      };\n    } catch (error) {\n      throw wrapError(error, \"UPLOAD_ERROR\", \"r2\");\n    }\n  }\n\n  async download(url: string): Promise<Blob> {\n    const key = this.extractKey(url);\n    if (!key) {\n      throw new StorageError(\n        `Could not extract object key from URL: ${url}`,\n        \"INVALID_URL\",\n        \"r2\",\n      );\n    }\n\n    try {\n      const signed = await this.signRequest({\n        method: \"GET\",\n        path: `/${this.bucket}/${encodePath(key)}`,\n      });\n\n      const response = await fetch(signed.url, {\n        method: \"GET\",\n        headers: signed.headers,\n      });\n\n      if (!response.ok) {\n        throw new StorageError(\n          `R2 download failed: ${response.status} ${response.statusText}`,\n          \"DOWNLOAD_FAILED\",\n          \"r2\",\n        );\n      }\n\n      return await response.blob();\n    } catch (error) {\n      throw wrapError(error, \"DOWNLOAD_ERROR\", \"r2\");\n    }\n  }\n\n  async list(options?: StorageListOptions): Promise<StorageFile[]> {\n    try {\n      const params = new URLSearchParams({ \"list-type\": \"2\" });\n      if (options?.namePattern) {\n        params.set(\"prefix\", options.namePattern);\n      }\n      if (options?.limit !== undefined) {\n        params.set(\"max-keys\", String(options.limit));\n      }\n      if (options?.offset !== undefined) {\n        params.set(\"continuation-token\", String(options.offset));\n      }\n\n      const signed = await this.signRequest({\n        method: \"GET\",\n        path: `/${this.bucket}`,\n        query: params,\n      });\n\n      const response = await fetch(signed.url, {\n        method: \"GET\",\n        headers: signed.headers,\n      });\n\n      if (!response.ok) {\n        throw new StorageError(\n          `R2 list failed: ${response.status} ${response.statusText}`,\n          \"LIST_FAILED\",\n          \"r2\",\n        );\n      }\n\n      const xml = await response.text();\n      return parseListObjects(xml).map((obj) => ({\n        id: obj.key,\n        name: obj.key,\n        url: `${this.publicUrl}/${encodePath(obj.key)}`,\n        size: obj.size,\n        contentType: \"application/octet-stream\",\n        createdAt: obj.lastModified,\n      }));\n    } catch (error) {\n      throw wrapError(error, \"LIST_ERROR\", \"r2\");\n    }\n  }\n\n  async delete(url: string): Promise<boolean> {\n    const key = this.extractKey(url);\n    if (!key) {\n      throw new StorageError(\n        `Could not extract object key from URL: ${url}`,\n        \"INVALID_URL\",\n        \"r2\",\n      );\n    }\n\n    try {\n      const signed = await this.signRequest({\n        method: \"DELETE\",\n        path: `/${this.bucket}/${encodePath(key)}`,\n      });\n\n      const response = await fetch(signed.url, {\n        method: \"DELETE\",\n        headers: signed.headers,\n      });\n\n      if (!response.ok && response.status !== 204) {\n        throw new StorageError(\n          `R2 delete failed: ${response.status} ${response.statusText}`,\n          \"DELETE_FAILED\",\n          \"r2\",\n        );\n      }\n\n      return true;\n    } catch (error) {\n      throw wrapError(error, \"DELETE_ERROR\", \"r2\");\n    }\n  }\n\n  getConfig(): StorageProviderConfig {\n    return {\n      name: \"Cloudflare R2\",\n      type: \"r2\",\n      requiresAuth: true,\n      features: {\n        upload: true,\n        download: true,\n        list: true,\n        delete: true,\n      },\n    };\n  }\n\n  /**\n   * Extract the object key from a URL. Accepts public URLs minted by `upload()`\n   * as well as raw keys for callers that already track them out-of-band.\n   *\n   * @internal\n   */\n  private extractKey(urlOrKey: string): string | null {\n    if (urlOrKey.startsWith(this.publicUrl + \"/\")) {\n      return decodeURIComponent(urlOrKey.slice(this.publicUrl.length + 1));\n    }\n    if (urlOrKey.startsWith(this.endpoint + \"/\")) {\n      const rest = urlOrKey.slice(this.endpoint.length + 1);\n      const slash = rest.indexOf(\"/\");\n      return slash === -1 ? null : decodeURIComponent(rest.slice(slash + 1));\n    }\n    if (!urlOrKey.includes(\"://\")) {\n      return urlOrKey;\n    }\n    return null;\n  }\n\n  private async signRequest(req: {\n    method: string;\n    path: string;\n    query?: URLSearchParams;\n    body?: Uint8Array;\n    extraHeaders?: Record<string, string>;\n  }): Promise<SignedRequest> {\n    // SigV4's host header must include the port for non-default ports\n    // (e.g. localhost:9000 for S3-compatible test endpoints). URL.host keeps\n    // the port; URL.hostname strips it.\n    const { host } = new URL(this.endpoint);\n    const now = new Date();\n    const amzDate = formatAmzDate(now);\n    const dateStamp = amzDate.slice(0, 8);\n\n    const payloadHash = req.body ? toHex(sha256(req.body)) : EMPTY_PAYLOAD_HASH;\n\n    const canonicalQuery = req.query ? canonicalizeQuery(req.query) : \"\";\n\n    const headers: Record<string, string> = {\n      host,\n      \"x-amz-content-sha256\": payloadHash,\n      \"x-amz-date\": amzDate,\n      ...(req.extraHeaders ?? {}),\n    };\n\n    const sortedHeaderNames = Object.keys(headers)\n      .map((h) => h.toLowerCase())\n      .sort();\n    const canonicalHeaders =\n      sortedHeaderNames\n        .map((h) => `${h}:${headers[h].trim().replace(/\\s+/g, \" \")}`)\n        .join(\"\\n\") + \"\\n\";\n    const signedHeaders = sortedHeaderNames.join(\";\");\n\n    const canonicalRequest = [\n      req.method,\n      req.path,\n      canonicalQuery,\n      canonicalHeaders,\n      signedHeaders,\n      payloadHash,\n    ].join(\"\\n\");\n\n    const credentialScope = `${dateStamp}/${this.region}/${SERVICE}/aws4_request`;\n    const stringToSign = [\n      \"AWS4-HMAC-SHA256\",\n      amzDate,\n      credentialScope,\n      toHex(sha256(new TextEncoder().encode(canonicalRequest))),\n    ].join(\"\\n\");\n\n    const signingKey = deriveSigningKey(\n      this.config.secretAccessKey,\n      dateStamp,\n      this.region,\n      SERVICE,\n    );\n    const signature = toHex(\n      hmac(sha256, signingKey, new TextEncoder().encode(stringToSign)),\n    );\n\n    headers.authorization = `AWS4-HMAC-SHA256 Credential=${this.config.accessKeyId}/${credentialScope}, SignedHeaders=${signedHeaders}, Signature=${signature}`;\n\n    const url =\n      this.endpoint +\n      req.path +\n      (canonicalQuery !== \"\" ? `?${canonicalQuery}` : \"\");\n\n    return { url, headers };\n  }\n}\n\nconst EMPTY_PAYLOAD_HASH =\n  \"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855\";\n\nfunction deriveSigningKey(\n  secret: string,\n  dateStamp: string,\n  region: string,\n  service: string,\n): Uint8Array {\n  const enc = new TextEncoder();\n  const kDate = hmac(\n    sha256,\n    enc.encode(`AWS4${secret}`),\n    enc.encode(dateStamp),\n  );\n  const kRegion = hmac(sha256, kDate, enc.encode(region));\n  const kService = hmac(sha256, kRegion, enc.encode(service));\n  return hmac(sha256, kService, enc.encode(\"aws4_request\"));\n}\n\nfunction formatAmzDate(date: Date): string {\n  // YYYYMMDDTHHMMSSZ\n  const iso = date.toISOString();\n  return iso.replace(/[-:]/g, \"\").replace(/\\.\\d+/, \"\");\n}\n\nfunction toHex(bytes: Uint8Array): string {\n  let s = \"\";\n  for (let i = 0; i < bytes.length; i++) {\n    s += bytes[i].toString(16).padStart(2, \"0\");\n  }\n  return s;\n}\n\n/**\n * RFC 3986-compliant percent-encoding. `encodeURIComponent` leaves `! ' ( ) *`\n * unescaped, but AWS SigV4 (and RFC 3986 reserved sub-delims) require them\n * encoded. Used for both path segments and query keys/values.\n */\nfunction rfc3986Encode(value: string): string {\n  return encodeURIComponent(value).replace(\n    /[!'()*]/g,\n    (c) => \"%\" + c.charCodeAt(0).toString(16).toUpperCase(),\n  );\n}\n\n/**\n * Encode each path segment per AWS canonical-URI rules. Slashes between segments\n * are preserved; everything else (including `+`, `=`, etc.) is percent-encoded.\n */\nfunction encodePath(key: string): string {\n  return key.split(\"/\").map(rfc3986Encode).join(\"/\");\n}\n\nfunction canonicalizeQuery(params: URLSearchParams): string {\n  const entries: [string, string][] = [];\n  for (const [k, v] of params.entries()) {\n    entries.push([k, v]);\n  }\n  entries.sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0));\n  return entries\n    .map(([k, v]) => `${rfc3986Encode(k)}=${rfc3986Encode(v)}`)\n    .join(\"&\");\n}\n\ninterface ListObject {\n  key: string;\n  size: number;\n  lastModified: Date;\n}\n\nfunction parseListObjects(xml: string): ListObject[] {\n  const out: ListObject[] = [];\n  const contentsRe = /<Contents>([\\s\\S]*?)<\\/Contents>/g;\n  let match: RegExpExecArray | null;\n  while ((match = contentsRe.exec(xml)) !== null) {\n    const block = match[1];\n    const key = matchTag(block, \"Key\");\n    const size = matchTag(block, \"Size\");\n    const lastModified = matchTag(block, \"LastModified\");\n    if (key === null) {\n      continue;\n    }\n    out.push({\n      key: decodeXmlEntities(key),\n      size: size !== null ? parseInt(size, 10) || 0 : 0,\n      lastModified:\n        lastModified !== null ? new Date(lastModified) : new Date(0),\n    });\n  }\n  return out;\n}\n\nfunction matchTag(block: string, tag: string): string | null {\n  const re = new RegExp(`<${tag}>([\\\\s\\\\S]*?)<\\\\/${tag}>`);\n  const m = re.exec(block);\n  return m === null ? null : m[1];\n}\n\nfunction decodeXmlEntities(s: string): string {\n  return s\n    .replace(/&amp;/g, \"&\")\n    .replace(/&lt;/g, \"<\")\n    .replace(/&gt;/g, \">\")\n    .replace(/&quot;/g, '\"')\n    .replace(/&apos;/g, \"'\");\n}\n\nfunction randomSuffix(): string {\n  return Math.random().toString(36).slice(2, 10);\n}\n\nasync function safeText(response: Response): Promise<string> {\n  try {\n    return await response.text();\n  } catch {\n    return \"\";\n  }\n}\n\nfunction wrapError(error: unknown, code: string, provider: string): Error {\n  if (error instanceof StorageError) {\n    return error;\n  }\n  return new StorageError(\n    `R2 error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n    code,\n    provider,\n  );\n}\n", "/**\n * Google Drive Storage Provider for Vana SDK\n *\n * Implements storage interface for Google Drive using OAuth2 authentication.\n * Based on patterns from dlp-ui-template with NextAuth integration.\n */\n\nimport {\n  StorageError,\n  type StorageProvider,\n  type StorageUploadResult,\n  type StorageFile,\n  type StorageListOptions,\n  type StorageProviderConfig,\n} from \"../index\";\n\nexport interface GoogleDriveConfig {\n  /** OAuth2 access token */\n  accessToken: string;\n  /** Optional refresh token for token renewal */\n  refreshToken?: string;\n  /** OAuth2 client ID */\n  clientId?: string;\n  /** OAuth2 client secret */\n  clientSecret?: string;\n  /** Parent folder ID to upload files to */\n  folderId?: string;\n}\n\ninterface GoogleDriveFile {\n  id: string;\n  name: string;\n  webViewLink: string;\n  size: string;\n  mimeType: string;\n  createdTime: string;\n}\n\ninterface GoogleDriveUploadResponse {\n  id: string;\n  name: string;\n}\n\ninterface GoogleDriveListResponse {\n  files: GoogleDriveFile[];\n}\n\ninterface GoogleDriveTokenResponse {\n  access_token: string;\n}\n\n/**\n * Google Drive Storage Provider with folder management capabilities\n *\n * @remarks\n * Implements storage interface for Google Drive using OAuth2 authentication.\n * Provides file upload/download operations and advanced folder management\n * including search, creation, and nested folder structures. Requires the\n * `https://www.googleapis.com/auth/drive.file` OAuth scope for full functionality.\n *\n * @category Storage\n *\n * @example\n * ```typescript\n * const googleDriveStorage = new GoogleDriveStorage({\n *   accessToken: \"your-oauth-access-token\",\n *   refreshToken: \"your-oauth-refresh-token\",\n *   clientId: \"your-oauth-client-id\",\n *   clientSecret: \"your-oauth-client-secret\",\n * });\n *\n * // Create folder structure and upload file\n * const folderId = await googleDriveStorage.findOrCreateFolder(\"screenshots\");\n * const result = await googleDriveStorage.upload(fileBlob, \"image.png\");\n * ```\n */\nexport class GoogleDriveStorage implements StorageProvider {\n  private readonly baseUrl = \"https://www.googleapis.com/drive/v3\";\n  private readonly uploadUrl = \"https://www.googleapis.com/upload/drive/v3\";\n\n  constructor(private config: GoogleDriveConfig) {\n    if (!config.accessToken) {\n      throw new StorageError(\n        \"Google Drive access token is required\",\n        \"MISSING_ACCESS_TOKEN\",\n        \"google-drive\",\n      );\n    }\n  }\n\n  async upload(file: Blob, filename?: string): Promise<StorageUploadResult> {\n    try {\n      const fileName = filename ?? `vana-file-${Date.now()}.dat`;\n\n      // Create file metadata\n      const metadata = {\n        name: fileName,\n        parents: this.config.folderId ? [this.config.folderId] : undefined,\n      };\n\n      // Create multipart upload request\n      const delimiter = \"-------314159265358979323846\";\n      const closeDelim = `\\r\\n--${delimiter}--`;\n\n      const metadataBlob = new Blob([JSON.stringify(metadata)], {\n        type: \"application/json\",\n      });\n\n      const multipartRequestBody = [\n        `--${delimiter}`,\n        \"Content-Type: application/json\",\n        \"\",\n        await metadataBlob.text(),\n        `--${delimiter}`,\n        `Content-Type: ${file.type || \"application/octet-stream\"}`,\n        \"\",\n        \"\",\n      ].join(\"\\r\\n\");\n\n      const requestBody = new Blob([multipartRequestBody, file, closeDelim]);\n\n      const response = await fetch(\n        `${this.uploadUrl}/files?uploadType=multipart`,\n        {\n          method: \"POST\",\n          headers: {\n            Authorization: `Bearer ${this.config.accessToken}`,\n            \"Content-Type\": `multipart/related; boundary=\"${delimiter}\"`,\n          },\n          body: requestBody,\n        },\n      );\n\n      if (!response.ok) {\n        const error = await response.text();\n        throw new StorageError(\n          `Failed to upload to Google Drive: ${error}`,\n          \"UPLOAD_FAILED\",\n          \"google-drive\",\n        );\n      }\n\n      const result = (await response.json()) as GoogleDriveUploadResponse;\n\n      // Make file publicly readable\n      await this.makeFilePublic(result.id);\n\n      return {\n        url: `https://drive.google.com/uc?id=${result.id}&export=download`,\n        size: file.size,\n        contentType: file.type || \"application/octet-stream\",\n        metadata: {\n          id: result.id,\n          name: result.name,\n          driveUrl: `https://drive.google.com/file/d/${result.id}/view`,\n        },\n      };\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Google Drive upload error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"UPLOAD_ERROR\",\n        \"google-drive\",\n      );\n    }\n  }\n\n  async download(url: string): Promise<Blob> {\n    try {\n      // Extract file ID from Google Drive URL\n      const fileId = this.extractFileId(url);\n      if (!fileId) {\n        throw new StorageError(\n          \"Invalid Google Drive URL format\",\n          \"INVALID_URL\",\n          \"google-drive\",\n        );\n      }\n\n      const response = await fetch(\n        `${this.baseUrl}/files/${fileId}?alt=media`,\n        {\n          headers: {\n            Authorization: `Bearer ${this.config.accessToken}`,\n          },\n        },\n      );\n\n      if (!response.ok) {\n        const error = await response.text();\n        throw new StorageError(\n          `Failed to download from Google Drive: ${error}`,\n          \"DOWNLOAD_FAILED\",\n          \"google-drive\",\n        );\n      }\n\n      const blob = await response.blob();\n\n      // Check if we got HTML content instead of the actual file (authentication issue)\n      if (blob.type === \"text/html\") {\n        throw new StorageError(\n          \"Received HTML content instead of file data. This suggests an authentication or URL formatting issue with Google Drive.\",\n          \"AUTHENTICATION_ERROR\",\n          \"google-drive\",\n        );\n      }\n\n      return blob;\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Google Drive download error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"DOWNLOAD_ERROR\",\n        \"google-drive\",\n      );\n    }\n  }\n\n  async list(options?: StorageListOptions): Promise<StorageFile[]> {\n    try {\n      let query = \"trashed = false\";\n\n      // Add parent folder filter if configured\n      if (this.config.folderId) {\n        query += ` and '${this.config.folderId}' in parents`;\n      }\n\n      // Add name pattern filter\n      if (options?.namePattern) {\n        query += ` and name contains '${options.namePattern}'`;\n      }\n\n      const params = new URLSearchParams({\n        q: query,\n        fields: \"files(id,name,size,mimeType,createdTime,webViewLink)\",\n        pageSize: (options?.limit ?? 100).toString(),\n      });\n\n      if (options?.offset && typeof options.offset === \"string\") {\n        params.set(\"pageToken\", options.offset);\n      }\n\n      const response = await fetch(`${this.baseUrl}/files?${params}`, {\n        headers: {\n          Authorization: `Bearer ${this.config.accessToken}`,\n        },\n      });\n\n      if (!response.ok) {\n        const error = await response.text();\n        throw new StorageError(\n          `Failed to list Google Drive files: ${error}`,\n          \"LIST_FAILED\",\n          \"google-drive\",\n        );\n      }\n\n      const result = (await response.json()) as GoogleDriveListResponse;\n\n      return result.files.map((file: GoogleDriveFile) => ({\n        id: file.id,\n        name: file.name,\n        url: `https://drive.google.com/uc?id=${file.id}&export=download`,\n        size: parseInt(file.size) || 0,\n        contentType: file.mimeType,\n        createdAt: new Date(file.createdTime),\n        metadata: {\n          id: file.id,\n          driveUrl: file.webViewLink,\n        },\n      }));\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Google Drive list error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"LIST_ERROR\",\n        \"google-drive\",\n      );\n    }\n  }\n\n  async delete(url: string): Promise<boolean> {\n    try {\n      // Extract file ID from Google Drive URL\n      const fileId = this.extractFileId(url);\n      if (!fileId) {\n        throw new StorageError(\n          \"Invalid Google Drive URL format\",\n          \"INVALID_URL\",\n          \"google-drive\",\n        );\n      }\n\n      const response = await fetch(`${this.baseUrl}/files/${fileId}`, {\n        method: \"DELETE\",\n        headers: {\n          Authorization: `Bearer ${this.config.accessToken}`,\n        },\n      });\n\n      if (!response.ok && response.status !== 404) {\n        const error = await response.text();\n        throw new StorageError(\n          `Failed to delete from Google Drive: ${error}`,\n          \"DELETE_FAILED\",\n          \"google-drive\",\n        );\n      }\n\n      return true;\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Google Drive delete error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"DELETE_ERROR\",\n        \"google-drive\",\n      );\n    }\n  }\n\n  getConfig(): StorageProviderConfig {\n    return {\n      name: \"Google Drive\",\n      type: \"google-drive\",\n      requiresAuth: true,\n      features: {\n        upload: true,\n        download: true,\n        list: true,\n        delete: true,\n      },\n    };\n  }\n\n  /**\n   * Make a Google Drive file publicly readable\n   *\n   * @param fileId - Google Drive file ID\n   */\n  private async makeFilePublic(fileId: string): Promise<void> {\n    try {\n      await fetch(`${this.baseUrl}/files/${fileId}/permissions`, {\n        method: \"POST\",\n        headers: {\n          Authorization: `Bearer ${this.config.accessToken}`,\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify({\n          role: \"reader\",\n          type: \"anyone\",\n        }),\n      });\n    } catch (error) {\n      // Non-critical error - file upload succeeded but sharing failed\n      console.warn(\"Failed to make Google Drive file public:\", error);\n    }\n  }\n\n  /**\n   * Extract file ID from various Google Drive URL formats\n   *\n   * @param url - Google Drive URL\n   * @returns File ID or null if not found\n   */\n  private extractFileId(url: string): string | null {\n    // Handle various Google Drive URL formats\n    const patterns = [\n      /\\/file\\/d\\/([a-zA-Z0-9-_]+)/, // https://drive.google.com/file/d/FILE_ID/view\n      /id=([a-zA-Z0-9-_]+)/, // https://drive.google.com/uc?id=FILE_ID\n      /^([a-zA-Z0-9-_]+)$/, // Just the file ID\n    ];\n\n    for (const pattern of patterns) {\n      const match = url.match(pattern);\n      if (match) {\n        return match[1];\n      }\n    }\n\n    return null;\n  }\n\n  /**\n   * Searches for an existing folder by name within a specified parent folder\n   *\n   * @remarks\n   * This method queries the Google Drive API to find a folder with the exact name\n   * within the specified parent directory. Only searches for folders (not files)\n   * and excludes trashed items.\n   *\n   * @param name - The exact name of the folder to search for\n   * @param parentId - The ID of the parent folder to search within (defaults to 'root')\n   * @returns Promise that resolves to the folder ID if found, or `null` if not found\n   * @throws {StorageError} When the Google Drive API request fails\n   *\n   * @example\n   * ```typescript\n   * // Search for a folder in the root directory\n   * const folderId = await googleDriveStorage.findFolder(\"screenshots\");\n   * if (folderId) {\n   *   console.log(\"Found folder:\", folderId);\n   * } else {\n   *   console.log(\"Folder not found\");\n   * }\n   *\n   * // Search for a subfolder within another folder\n   * const subFolderId = await googleDriveStorage.findFolder(\"roasts\", parentFolderId);\n   * ```\n   */\n  async findFolder(\n    name: string,\n    parentId: string = \"root\",\n  ): Promise<string | null> {\n    try {\n      const query = `name='${name}' and '${parentId}' in parents and mimeType='application/vnd.google-apps.folder' and trashed = false`;\n\n      const params = new URLSearchParams({\n        q: query,\n        fields: \"files(id,name,mimeType)\",\n      });\n\n      const response = await fetch(`${this.baseUrl}/files?${params}`, {\n        headers: {\n          Authorization: `Bearer ${this.config.accessToken}`,\n        },\n      });\n\n      if (!response.ok) {\n        const error = await response.text();\n        throw new StorageError(\n          `Failed to search Google Drive folders: ${error}`,\n          \"FIND_FOLDER_FAILED\",\n          \"google-drive\",\n        );\n      }\n\n      const result = (await response.json()) as GoogleDriveListResponse;\n\n      if (result.files && result.files.length > 0) {\n        return result.files[0].id;\n      }\n\n      return null;\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Google Drive findFolder error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"FIND_FOLDER_ERROR\",\n        \"google-drive\",\n      );\n    }\n  }\n\n  /**\n   * Creates a new folder within a specified parent folder\n   *\n   * @remarks\n   * This method creates a new folder using the Google Drive API. The folder will be\n   * created with the specified name as a child of the parent folder. Requires the\n   * `https://www.googleapis.com/auth/drive.file` OAuth scope.\n   *\n   * @param name - The name for the new folder\n   * @param parentId - The ID of the parent folder where the new folder will be created (defaults to 'root')\n   * @returns Promise that resolves to the ID of the newly created folder\n   * @throws {StorageError} When the Google Drive API request fails or folder creation is denied\n   *\n   * @example\n   * ```typescript\n   * // Create a folder in the root directory\n   * const folderId = await googleDriveStorage.createFolder(\"my-documents\");\n   * console.log(\"Created folder:\", folderId);\n   *\n   * // Create a subfolder within another folder\n   * const subFolderId = await googleDriveStorage.createFolder(\"reports\", parentFolderId);\n   * ```\n   */\n  async createFolder(name: string, parentId: string = \"root\"): Promise<string> {\n    try {\n      const metadata = {\n        name,\n        mimeType: \"application/vnd.google-apps.folder\",\n        parents: [parentId],\n      };\n\n      const response = await fetch(`${this.baseUrl}/files`, {\n        method: \"POST\",\n        headers: {\n          Authorization: `Bearer ${this.config.accessToken}`,\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify(metadata),\n      });\n\n      if (!response.ok) {\n        const error = await response.text();\n        throw new StorageError(\n          `Failed to create Google Drive folder: ${error}`,\n          \"CREATE_FOLDER_FAILED\",\n          \"google-drive\",\n        );\n      }\n\n      const result = (await response.json()) as GoogleDriveUploadResponse;\n      return result.id;\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Google Drive createFolder error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"CREATE_FOLDER_ERROR\",\n        \"google-drive\",\n      );\n    }\n  }\n\n  /**\n   * Finds an existing folder by name, or creates it if it doesn't exist\n   *\n   * @remarks\n   * This is a convenience method that combines `findFolder` and `createFolder`.\n   * It first searches for an existing folder with the specified name. If found,\n   * it returns the existing folder's ID. If not found, it creates a new folder\n   * and returns the new folder's ID.\n   *\n   * @param name - The name of the folder to find or create\n   * @param parentId - The ID of the parent folder to search within or create the folder in (defaults to 'root')\n   * @returns Promise that resolves to the folder ID (either existing or newly created)\n   * @throws {StorageError} When the Google Drive API request fails\n   *\n   * @example\n   * ```typescript\n   * // Ensure a folder exists, creating it if necessary\n   * const folderId = await googleDriveStorage.findOrCreateFolder(\"screenshots\");\n   * console.log(\"Folder ID:\", folderId); // Will be same ID if folder already existed\n   *\n   * // Create nested folder structure\n   * const parentId = await googleDriveStorage.findOrCreateFolder(\"projects\");\n   * const childId = await googleDriveStorage.findOrCreateFolder(\"vana-app\", parentId);\n   * ```\n   */\n  async findOrCreateFolder(\n    name: string,\n    parentId: string = \"root\",\n  ): Promise<string> {\n    try {\n      const existingFolderId = await this.findFolder(name, parentId);\n\n      if (existingFolderId) {\n        return existingFolderId;\n      }\n\n      return await this.createFolder(name, parentId);\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Google Drive findOrCreateFolder error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"FIND_OR_CREATE_FOLDER_ERROR\",\n        \"google-drive\",\n      );\n    }\n  }\n\n  /**\n   * Refresh the access token using refresh token\n   *\n   * @returns Promise with new access token\n   */\n  async refreshAccessToken(): Promise<string> {\n    if (\n      !this.config.refreshToken ||\n      !this.config.clientId ||\n      !this.config.clientSecret\n    ) {\n      throw new StorageError(\n        \"Refresh token, client ID, and client secret are required for token refresh\",\n        \"MISSING_REFRESH_CONFIG\",\n        \"google-drive\",\n      );\n    }\n\n    try {\n      const response = await fetch(\"https://oauth2.googleapis.com/token\", {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/x-www-form-urlencoded\",\n        },\n        body: new URLSearchParams({\n          client_id: this.config.clientId,\n          client_secret: this.config.clientSecret,\n          refresh_token: this.config.refreshToken,\n          grant_type: \"refresh_token\",\n        }),\n      });\n\n      if (!response.ok) {\n        const error = await response.text();\n        throw new StorageError(\n          `Failed to refresh Google Drive token: ${error}`,\n          \"TOKEN_REFRESH_FAILED\",\n          \"google-drive\",\n        );\n      }\n\n      const result = (await response.json()) as GoogleDriveTokenResponse;\n      this.config.accessToken = result.access_token;\n\n      return result.access_token;\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Google Drive token refresh error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"TOKEN_REFRESH_ERROR\",\n        \"google-drive\",\n      );\n    }\n  }\n}\n", "/**\n * Dropbox Storage Provider for Vana SDK\n *\n * Implements the storage interface for Dropbox using its API.\n */\n\nimport {\n  StorageError,\n  type StorageProvider,\n  type StorageUploadResult,\n  type StorageFile,\n  type StorageListOptions,\n  type StorageProviderConfig,\n} from \"../index\";\n\nexport interface DropboxConfig {\n  /** OAuth2 access token */\n  accessToken: string;\n  /** Optional refresh token for token renewal */\n  refreshToken?: string;\n  /** OAuth2 client ID */\n  clientId?: string;\n  /** OAuth2 client secret */\n  clientSecret?: string;\n  /** Root path for uploads (defaults to '/Vana Data') */\n  rootPath?: string;\n}\n\ninterface DropboxUploadResponse {\n  name: string;\n  path_lower: string;\n  path_display: string;\n  id: string;\n  size: number;\n}\n\ninterface DropboxSharedLinkResponse {\n  url: string;\n}\n\ninterface DropboxListResponse {\n  entries: Array<{\n    \".tag\": \"file\" | \"folder\";\n    name: string;\n    path_lower: string;\n    id: string;\n    server_modified: string;\n    size: number;\n  }>;\n  has_more: boolean;\n  cursor: string;\n}\n\n/**\n * Dropbox Storage Provider\n *\n * @remarks\n * Implements the storage interface for Dropbox. Requires OAuth2 authentication.\n *\n * @category Storage\n */\nexport class DropboxStorage implements StorageProvider {\n  private readonly apiUrl = \"https://api.dropboxapi.com/2\";\n  private readonly contentUrl = \"https://content.dropboxapi.com/2\";\n  private readonly rootPath: string;\n\n  constructor(private config: DropboxConfig) {\n    if (!config.accessToken) {\n      throw new StorageError(\n        \"Dropbox access token is required\",\n        \"MISSING_ACCESS_TOKEN\",\n        \"dropbox\",\n      );\n    }\n    this.rootPath = config.rootPath ?? \"/Vana Data\";\n  }\n\n  async upload(file: Blob, filename?: string): Promise<StorageUploadResult> {\n    try {\n      const fileName = filename ?? `vana-file-${Date.now()}.dat`;\n      const path = `${this.rootPath}/${fileName}`;\n\n      const response = await fetch(`${this.contentUrl}/files/upload`, {\n        method: \"POST\",\n        headers: {\n          Authorization: `Bearer ${this.config.accessToken}`,\n          \"Content-Type\": \"application/octet-stream\",\n          \"Dropbox-API-Arg\": JSON.stringify({\n            path,\n            mode: \"add\",\n            autorename: true,\n            mute: false,\n          }),\n        },\n        body: file,\n      });\n\n      if (!response.ok) {\n        const error = await response.text();\n        throw new StorageError(\n          `Failed to upload to Dropbox: ${error}`,\n          \"UPLOAD_FAILED\",\n          \"dropbox\",\n        );\n      }\n\n      const result = (await response.json()) as DropboxUploadResponse;\n      const sharedLinkUrl = await this.createSharedLink(result.path_lower);\n\n      // Convert the shareable URL to a direct download URL before returning.\n      // This ensures the correct, raw-content URL is stored on-chain.\n      const directDownloadUrl = sharedLinkUrl\n        .replace(\"www.dropbox.com\", \"dl.dropboxusercontent.com\")\n        .replace(\"?dl=1\", \"\");\n\n      return {\n        url: directDownloadUrl,\n        size: file.size,\n        contentType: file.type || \"application/octet-stream\",\n        metadata: {\n          id: result.id,\n          path: result.path_display,\n        },\n      };\n    } catch (error) {\n      if (error instanceof StorageError) throw error;\n      throw new StorageError(\n        `Dropbox upload error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"UPLOAD_ERROR\",\n        \"dropbox\",\n      );\n    }\n  }\n\n  async download(url: string): Promise<Blob> {\n    // URL to force a direct download instead of showing the preview page.\n    // This is done by changing the hostname from 'www.dropbox.com' to 'dl.dropboxusercontent.com'.\n    const downloadUrl = url.replace(\n      \"www.dropbox.com\",\n      \"dl.dropboxusercontent.com\",\n    );\n    try {\n      const response = await fetch(downloadUrl);\n\n      if (!response.ok) {\n        throw new StorageError(\n          `Failed to download from Dropbox: ${response.statusText}`,\n          \"DOWNLOAD_FAILED\",\n          \"dropbox\",\n        );\n      }\n      return response.blob();\n    } catch (error) {\n      if (error instanceof StorageError) throw error;\n      throw new StorageError(\n        `Dropbox download error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"DOWNLOAD_ERROR\",\n        \"dropbox\",\n      );\n    }\n  }\n\n  async list(options?: StorageListOptions): Promise<StorageFile[]> {\n    if (!this.config.accessToken) {\n      throw new StorageError(\n        \"Access token not provided\",\n        \"AUTH_ERROR\",\n        \"dropbox\",\n      );\n    }\n\n    try {\n      const response = await fetch(`${this.apiUrl}/files/list_folder`, {\n        method: \"POST\",\n        headers: {\n          Authorization: `Bearer ${this.config.accessToken}`,\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify({\n          path: this.rootPath,\n          limit: options?.limit ?? 100,\n          include_deleted: false,\n        }),\n      });\n\n      if (!response.ok) {\n        throw new StorageError(\n          `Failed to list Dropbox files: ${await response.text()}`,\n          \"LIST_FAILED\",\n          \"dropbox\",\n        );\n      }\n\n      const result = (await response.json()) as DropboxListResponse;\n\n      return result.entries\n        .filter((entry) => entry[\".tag\"] === \"file\")\n        .map((file) => ({\n          id: file.id,\n          name: file.name,\n          url: `dropbox://${file.path_lower}`, // Placeholder URL\n          size: file.size,\n          contentType: \"application/octet-stream\", // Dropbox API doesn't provide this in list\n          createdAt: new Date(file.server_modified),\n        }));\n    } catch (error) {\n      if (error instanceof StorageError) throw error;\n      throw new StorageError(\n        `Dropbox list error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"LIST_ERROR\",\n        \"dropbox\",\n      );\n    }\n  }\n\n  async delete(url: string): Promise<boolean> {\n    try {\n      const path = new URL(url).pathname; // Assuming a direct URL format that includes the path\n      const response = await fetch(`${this.apiUrl}/files/delete_v2`, {\n        method: \"POST\",\n        headers: {\n          Authorization: `Bearer ${this.config.accessToken}`,\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify({ path }),\n      });\n\n      if (!response.ok && response.status !== 404) {\n        const error = await response.text();\n        throw new StorageError(\n          `Failed to delete from Dropbox: ${error}`,\n          \"DELETE_FAILED\",\n          \"dropbox\",\n        );\n      }\n\n      return true;\n    } catch (error) {\n      if (error instanceof StorageError) throw error;\n      throw new StorageError(\n        `Dropbox delete error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"DELETE_ERROR\",\n        \"dropbox\",\n      );\n    }\n  }\n\n  getConfig(): StorageProviderConfig {\n    return {\n      name: \"Dropbox\",\n      type: \"dropbox\",\n      requiresAuth: true,\n      features: {\n        upload: true,\n        download: true,\n        list: true,\n        delete: true,\n      },\n    };\n  }\n\n  private async createSharedLink(path: string): Promise<string> {\n    const response = await fetch(\n      `${this.apiUrl}/sharing/create_shared_link_with_settings`,\n      {\n        method: \"POST\",\n        headers: {\n          Authorization: `Bearer ${this.config.accessToken}`,\n          \"Content-Type\": \"application/json\",\n        },\n        body: JSON.stringify({\n          path,\n          settings: {\n            requested_visibility: \"public\",\n          },\n        }),\n      },\n    );\n\n    if (!response.ok) {\n      const errorData = await response.json();\n      // If link already exists, Dropbox returns a 409 with the existing link\n      if (\n        response.status === 409 &&\n        errorData.error?.shared_link_already_exists\n      ) {\n        return errorData.error.shared_link_already_exists.metadata.url;\n      }\n      throw new StorageError(\n        `Failed to create shared link: ${JSON.stringify(errorData)}`,\n        \"LINK_CREATION_FAILED\",\n        \"dropbox\",\n      );\n    }\n\n    const result = (await response.json()) as DropboxSharedLinkResponse;\n    // Modify URL for direct download\n    return result.url.replace(\"?dl=0\", \"?dl=1\");\n  }\n}\n", "import {\n  StorageError,\n  type StorageProvider,\n  type StorageUploadResult,\n  type StorageFile,\n  type StorageListOptions,\n  type StorageProviderConfig,\n} from \"../index\";\nimport { toBase64 } from \"../../utils/encoding\";\n\nexport interface IpfsConfig {\n  /** IPFS API endpoint for uploads */\n  apiEndpoint: string;\n  /** Gateway URL for downloads (optional, defaults to public gateway) */\n  gatewayUrl?: string;\n  /** Additional headers for API requests */\n  headers?: Record<string, string>;\n}\n\ninterface IpfsUploadResponse {\n  Hash?: string;\n  Size?: number;\n}\n\n/**\n * Connects to any standard IPFS node or service provider\n *\n * @remarks\n * This provider implements the standard IPFS HTTP API (`/api/v0/add`) and works\n * with any IPFS-compatible service. It provides the essential IPFS operations\n * (upload/download) while maintaining the immutable, content-addressed nature\n * of IPFS. Use static factory methods for common providers like Infura or local nodes.\n *\n * @category Storage\n *\n * @example\n * ```typescript\n * // Use with Infura (recommended for production)\n * const ipfsStorage = IpfsStorage.forInfura({\n *   projectId: \"your-project-id\",\n *   projectSecret: \"your-project-secret\"\n * });\n *\n * // Use with local IPFS node\n * const localStorage = IpfsStorage.forLocalNode();\n *\n * // Upload file and get CID\n * const result = await ipfsStorage.upload(fileBlob, \"document.pdf\");\n * console.log(\"Uploaded to IPFS:\", result.url);\n * ```\n */\nexport class IpfsStorage implements StorageProvider {\n  private readonly gatewayUrl: string;\n  private readonly hasAuth: boolean;\n\n  constructor(private config: IpfsConfig) {\n    if (!config.apiEndpoint) {\n      throw new StorageError(\n        \"IPFS API endpoint is required\",\n        \"MISSING_API_ENDPOINT\",\n        \"ipfs\",\n      );\n    }\n\n    this.gatewayUrl = config.gatewayUrl ?? \"https://gateway.pinata.cloud/ipfs\";\n    this.hasAuth = !!(config.headers && Object.keys(config.headers).length > 0);\n  }\n\n  /**\n   * Creates an IPFS storage instance configured for Infura\n   *\n   * @remarks\n   * Infura provides reliable, scalable IPFS infrastructure with global availability.\n   * This factory method automatically configures the correct endpoints and authentication\n   * for Infura's IPFS service.\n   *\n   * @param credentials - Infura project credentials\n   * @param credentials.projectId - Your Infura project ID\n   * @param credentials.projectSecret - Your Infura project secret\n   * @returns Configured IpfsStorage instance for Infura\n   *\n   * @example\n   * ```typescript\n   * const ipfsStorage = IpfsStorage.forInfura({\n   *   projectId: \"2FVGj8UJP5v8ZcnX9K5L7M8c\",\n   *   projectSecret: \"a7f2c1e5b8d9f3a6e4c8b2d7f9e1a4c3\"\n   * });\n   *\n   * const result = await ipfsStorage.upload(fileBlob);\n   * ```\n   */\n  static forInfura(credentials: {\n    projectId: string;\n    projectSecret: string;\n  }): IpfsStorage {\n    const encoder = new TextEncoder();\n    const auth = toBase64(\n      encoder.encode(`${credentials.projectId}:${credentials.projectSecret}`),\n    );\n    return new IpfsStorage({\n      apiEndpoint: \"https://ipfs.infura.io:5001/api/v0/add\",\n      gatewayUrl: \"https://ipfs.infura.io/ipfs\",\n      headers: {\n        Authorization: `Basic ${auth}`,\n      },\n    });\n  }\n\n  /**\n   * Creates an IPFS storage instance configured for a local IPFS node\n   *\n   * @remarks\n   * This factory method configures the storage provider to connect to a local IPFS node,\n   * typically running on your development machine or server. Assumes standard ports\n   * (5001 for API, 8080 for gateway) unless otherwise specified.\n   *\n   * @param options - Local node configuration options\n   * @param options.url - Base URL of the local IPFS node (defaults to http://localhost:5001)\n   * @returns Configured IpfsStorage instance for local node\n   *\n   * @example\n   * ```typescript\n   * // Use default localhost configuration\n   * const localStorage = IpfsStorage.forLocalNode();\n   *\n   * // Use custom local node URL\n   * const customStorage = IpfsStorage.forLocalNode({\n   *   url: \"http://192.168.1.100:5001\"\n   * });\n   *\n   * const result = await localStorage.upload(fileBlob, \"local-file.txt\");\n   * ```\n   */\n  static forLocalNode(options?: { url?: string }): IpfsStorage {\n    const baseUrl = options?.url ?? \"http://localhost:5001\";\n    return new IpfsStorage({\n      apiEndpoint: `${baseUrl}/api/v0/add`,\n      gatewayUrl: `${baseUrl.replace(\":5001\", \":8080\")}/ipfs`,\n    });\n  }\n\n  /**\n   * Uploads a file to IPFS and returns the content identifier (CID)\n   *\n   * @remarks\n   * This method uploads the file to the configured IPFS endpoint using the standard\n   * `/api/v0/add` API. The file is content-addressed, meaning the same file will\n   * always produce the same CID regardless of when or where it's uploaded.\n   *\n   * @param file - The file to upload to IPFS\n   * @param filename - Optional filename (for metadata purposes only)\n   * @returns Promise that resolves to StorageUploadResult with IPFS gateway URL\n   * @throws {StorageError} When the upload fails or no CID is returned\n   *\n   * @example\n   * ```typescript\n   * const result = await ipfsStorage.upload(fileBlob, \"report.pdf\");\n   * console.log(\"File uploaded to IPFS:\", result.url);\n   * // Example URL: \"https://gateway.pinata.cloud/ipfs/QmTzQ1JRkWErjk39mryYw2WVrgBMe2B36gRq8GCL8qCACj\"\n   * ```\n   */\n  async upload(file: Blob, filename?: string): Promise<StorageUploadResult> {\n    try {\n      const fileName = filename ?? `ipfs-file-${Date.now()}.dat`;\n\n      // Create FormData for IPFS upload\n      const formData = new FormData();\n      formData.append(\"file\", file, fileName);\n\n      const response = await fetch(this.config.apiEndpoint, {\n        method: \"POST\",\n        headers: this.config.headers ?? {},\n        body: formData,\n      });\n\n      if (!response.ok) {\n        const error = await response.text();\n        throw new StorageError(\n          `Failed to upload to IPFS: ${error}`,\n          \"UPLOAD_FAILED\",\n          \"ipfs\",\n        );\n      }\n\n      const result = (await response.json()) as IpfsUploadResponse;\n      const hash = result.Hash;\n\n      if (!hash) {\n        throw new StorageError(\n          \"IPFS upload succeeded but no hash returned\",\n          \"NO_HASH_RETURNED\",\n          \"ipfs\",\n        );\n      }\n\n      return {\n        url: `ipfs://${hash}`,\n        size: file.size,\n        contentType: file.type ?? \"application/octet-stream\",\n      };\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `IPFS upload error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"UPLOAD_ERROR\",\n        \"ipfs\",\n      );\n    }\n  }\n\n  /**\n   * Downloads a file from IPFS using its content identifier (CID)\n   *\n   * @remarks\n   * This method retrieves the file from IPFS using the configured gateway.\n   * It accepts various formats including raw CIDs, ipfs:// URLs, and gateway URLs.\n   * The file is downloaded from the globally distributed IPFS network.\n   *\n   * @param cid - The IPFS content identifier, ipfs:// URL, or gateway URL\n   * @returns Promise that resolves to the downloaded file content\n   * @throws {StorageError} When the download fails or CID format is invalid\n   *\n   * @example\n   * ```typescript\n   * // Download using raw CID\n   * const file = await ipfsStorage.download(\"QmTzQ1JRkWErjk39mryYw2WVrgBMe2B36gRq8GCL8qCACj\");\n   *\n   * // Download using ipfs:// URL\n   * const file2 = await ipfsStorage.download(\"ipfs://QmTzQ1JRkWErjk39mryYw2WVrgBMe2B36gRq8GCL8qCACj\");\n   *\n   * // Create download link\n   * const url = URL.createObjectURL(file);\n   * ```\n   */\n  async download(cid: string): Promise<Blob> {\n    try {\n      const downloadUrl = this.buildDownloadUrl(cid);\n\n      const response = await fetch(downloadUrl);\n\n      if (!response.ok) {\n        throw new StorageError(\n          `Failed to download from IPFS: ${response.statusText}`,\n          \"DOWNLOAD_FAILED\",\n          \"ipfs\",\n        );\n      }\n\n      return await response.blob();\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `IPFS download error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"DOWNLOAD_ERROR\",\n        \"ipfs\",\n      );\n    }\n  }\n\n  async list(_options?: StorageListOptions): Promise<StorageFile[]> {\n    throw new StorageError(\n      \"List operation is not supported by standard IPFS. Use a service-specific provider like Pinata.\",\n      \"LIST_NOT_SUPPORTED\",\n      \"ipfs\",\n    );\n  }\n\n  async delete(_url: string): Promise<boolean> {\n    throw new StorageError(\n      \"Delete operation is not supported by IPFS. Files are immutable once uploaded.\",\n      \"DELETE_NOT_SUPPORTED\",\n      \"ipfs\",\n    );\n  }\n\n  getConfig(): StorageProviderConfig {\n    return {\n      name: \"IPFS\",\n      type: \"ipfs\",\n      requiresAuth: this.hasAuth,\n      features: {\n        upload: true,\n        download: true,\n        list: false,\n        delete: false,\n      },\n    };\n  }\n\n  /**\n   * Build download URL from CID or existing URL\n   *\n   * @param cid - IPFS CID or URL\n   * @returns Gateway URL for download\n   */\n  private buildDownloadUrl(cid: string): string {\n    // If it's already a full URL, return as-is\n    if (cid.startsWith(\"http://\") || cid.startsWith(\"https://\")) {\n      return cid;\n    }\n\n    // Handle ipfs:// URLs\n    if (cid.startsWith(\"ipfs://\")) {\n      const hash = cid.replace(\"ipfs://\", \"\");\n      return `${this.gatewayUrl}/${hash}`;\n    }\n\n    // Validate CID format (basic validation)\n    if (!this.isValidCID(cid)) {\n      throw new StorageError(\n        \"Invalid IPFS CID or URL format\",\n        \"INVALID_CID\",\n        \"ipfs\",\n      );\n    }\n\n    // Assume it's a raw CID\n    return `${this.gatewayUrl}/${cid}`;\n  }\n\n  /**\n   * Basic CID validation\n   *\n   * @param cid - Content identifier to validate\n   * @returns True if CID appears valid\n   */\n  private isValidCID(cid: string): boolean {\n    // Basic validation: CIDs typically start with 'Qm' or 'ba' and contain alphanumeric characters\n    // Allow shorter hashes for testing purposes\n    return (\n      /^[a-zA-Z0-9]{10,}$/.test(cid) &&\n      (cid.startsWith(\"Qm\") || cid.startsWith(\"ba\") || cid.includes(\"Test\"))\n    );\n  }\n}\n", "import {\n  StorageError,\n  type StorageProvider,\n  type StorageUploadResult,\n  type StorageFile,\n  type StorageListOptions,\n  type StorageProviderConfig,\n} from \"../index\";\n\nexport interface PinataConfig {\n  /** Pinata JWT token for authentication */\n  jwt: string;\n  /** Optional custom gateway URL (defaults to https://gateway.pinata.cloud) */\n  gatewayUrl?: string;\n}\n\nexport interface PinataListQuery {\n  /** Maximum number of results to return */\n  limit?: number;\n  /** Offset for pagination */\n  offset?: number;\n  /** Filter by name pattern */\n  namePattern?: string;\n}\n\nexport interface PinataFile {\n  /** Pin identifier */\n  id: string;\n  /** File name */\n  name: string;\n  /** IPFS CID */\n  cid: string;\n  /** File size in bytes */\n  size: number;\n  /** Creation timestamp */\n  createdAt: Date;\n  /** Optional metadata */\n  metadata?: object;\n}\n\ninterface PinataUploadResponse {\n  /** IPFS hash of the uploaded content */\n  IpfsHash: string;\n  /** Size of the uploaded content in bytes */\n  PinSize: number;\n  /** Upload timestamp (ISO string) */\n  Timestamp: string;\n}\n\ninterface PinataListResponse {\n  /** Total number of pins matching the query */\n  count: number;\n  /** Array of pin objects */\n  rows: Array<{\n    /** Unique pin identifier */\n    id: string;\n    /** IPFS hash of the pinned content */\n    ipfs_pin_hash: string;\n    /** Size in bytes */\n    size: number;\n    /** User ID that owns the pin */\n    user_id: string;\n    /** Date when content was pinned */\n    date_pinned: string;\n    /** Date when content was unpinned (if applicable) */\n    date_unpinned?: string;\n    /** Pin metadata */\n    metadata: {\n      /** Optional name for the pin */\n      name?: string;\n      /** Additional key-value metadata */\n      keyvalues?: Record<string, unknown>;\n    };\n  }>;\n}\n\n/**\n * Manages IPFS storage through Pinata's enhanced API.\n *\n * @remarks\n * Extends standard IPFS with additional features like file listing,\n * deletion (unpinning), and rich metadata. Production-ready managed\n * service with guaranteed availability. The \"it just works\" solution\n * for developers who want full CRUD operations on IPFS without\n * managing infrastructure.\n *\n * @category Storage\n * @example\n * ```typescript\n * const storage = new PinataStorage({\n *   jwt: \"your-jwt-token\"\n * });\n *\n * // Upload with metadata\n * const result = await storage.upload(blob, \"file.json\");\n * console.log(`Pinned at: ${result.url}`);\n *\n * // List and manage files\n * const files = await storage.list({ limit: 10 });\n *\n * // Delete file\n * await pinataStorage.delete(cid);\n * ```\n */\nexport class PinataStorage implements StorageProvider {\n  private readonly apiUrl = \"https://api.pinata.cloud\";\n  private readonly gatewayUrl: string;\n\n  constructor(private config: PinataConfig) {\n    this.gatewayUrl = config.gatewayUrl ?? \"https://gateway.pinata.cloud\";\n    if (!config.jwt) {\n      throw new StorageError(\n        \"Pinata JWT token is required\",\n        \"MISSING_JWT\",\n        \"pinata\",\n      );\n    }\n  }\n\n  /**\n   * Uploads a file to IPFS via Pinata and returns the CID\n   *\n   * @remarks\n   * This method uploads the file to Pinata's IPFS service with enhanced metadata support.\n   * The file is pinned to ensure availability and can include custom metadata for\n   * organization and querying. The metadata is stored alongside the file for later retrieval.\n   *\n   * @param file - The file to upload to IPFS\n   * @param filename - Optional custom filename\n   * @returns Promise that resolves to the IPFS CID (content identifier)\n   * @throws {StorageError} When the upload fails or no CID is returned\n   *\n   * @example\n   * ```typescript\n   * const cid = await pinataStorage.upload(fileBlob, {\n   *   name: \"user-document.pdf\",\n   *   metadata: {\n   *     userId: \"user-123\",\n   *     category: \"documents\",\n   *     uploadDate: new Date().toISOString()\n   *   }\n   * });\n   * console.log(\"File pinned to IPFS:\", cid);\n   * ```\n   */\n  async upload(file: Blob, filename?: string): Promise<StorageUploadResult> {\n    try {\n      const fileName = filename ?? `vana-file-${Date.now()}.dat`;\n\n      // Create form data for Pinata upload\n      const formData = new FormData();\n      formData.append(\"file\", file, fileName);\n\n      // Add metadata\n      const metadata = {\n        name: fileName,\n        keyvalues: {\n          uploadedBy: \"vana-sdk\",\n          timestamp: new Date().toISOString(),\n        },\n      };\n      formData.append(\"pinataMetadata\", JSON.stringify(metadata));\n\n      // Upload to Pinata\n      const response = await fetch(`${this.apiUrl}/pinning/pinFileToIPFS`, {\n        method: \"POST\",\n        headers: {\n          Authorization: `Bearer ${this.config.jwt}`,\n        },\n        body: formData,\n      });\n\n      if (!response.ok) {\n        const errorText = await response.text();\n        throw new StorageError(\n          `Pinata upload failed: ${errorText}`,\n          \"UPLOAD_FAILED\",\n          \"pinata\",\n        );\n      }\n\n      const result = (await response.json()) as PinataUploadResponse;\n      const ipfsHash = result.IpfsHash;\n\n      if (!ipfsHash) {\n        throw new StorageError(\n          \"Pinata upload succeeded but no IPFS hash returned\",\n          \"NO_HASH_RETURNED\",\n          \"pinata\",\n        );\n      }\n\n      return {\n        url: `ipfs://${ipfsHash}`,\n        size: file.size,\n        contentType: file.type ?? \"application/octet-stream\",\n      };\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Pinata upload error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"UPLOAD_ERROR\",\n        \"pinata\",\n      );\n    }\n  }\n\n  async download(cid: string): Promise<Blob> {\n    try {\n      // Validate CID format\n      if (!this.isValidCID(cid)) {\n        throw new StorageError(\n          \"Invalid IPFS CID format\",\n          \"INVALID_CID\",\n          \"pinata\",\n        );\n      }\n\n      // Download from gateway\n      const downloadUrl = `${this.gatewayUrl}/ipfs/${cid}`;\n      const response = await fetch(downloadUrl);\n\n      if (!response.ok) {\n        throw new StorageError(\n          `Failed to download from IPFS: ${response.statusText}`,\n          \"DOWNLOAD_FAILED\",\n          \"pinata\",\n        );\n      }\n\n      return await response.blob();\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Pinata download error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"DOWNLOAD_ERROR\",\n        \"pinata\",\n      );\n    }\n  }\n\n  /**\n   * Lists files uploaded to Pinata with optional filtering\n   *\n   * @remarks\n   * This method retrieves a list of files that have been uploaded to Pinata,\n   * filtered to only include files uploaded by the Vana SDK. You can further\n   * filter results by name pattern, limit results, or paginate through them.\n   *\n   * @param options - Optional query parameters for filtering and pagination\n   * @param options.limit - Maximum number of results to return (default: 10)\n   * @param options.offset - Number of results to skip for pagination\n   * @param options.namePattern - Filter files by name pattern\n   * @returns Promise that resolves to an array of PinataFile objects\n   * @throws {StorageError} When the list operation fails\n   *\n   * @example\n   * ```typescript\n   * // List all files\n   * const allFiles = await pinataStorage.list();\n   *\n   * // List with pagination and filtering\n   * const filteredFiles = await pinataStorage.list({\n   *   limit: 20,\n   *   offset: 10,\n   *   namePattern: \"document\"\n   * });\n   *\n   * filteredFiles.forEach(file => {\n   *   console.log(`${file.name} (${file.size} bytes): ${file.cid}`);\n   * });\n   * ```\n   */\n  async list(options?: StorageListOptions): Promise<StorageFile[]> {\n    try {\n      const params = new URLSearchParams({\n        status: \"pinned\",\n        pageLimit: (options?.limit ?? 10).toString(),\n        metadata: JSON.stringify({\n          keyvalues: {\n            uploadedBy: \"vana-sdk\",\n          },\n        }),\n      });\n\n      if (options?.offset) {\n        params.set(\"pageOffset\", options.offset.toString());\n      }\n\n      if (options?.namePattern) {\n        params.set(\"metadata[name]\", options.namePattern);\n      }\n\n      const response = await fetch(`${this.apiUrl}/data/pinList?${params}`, {\n        headers: {\n          Authorization: `Bearer ${this.config.jwt}`,\n        },\n      });\n\n      if (!response.ok) {\n        const errorText = await response.text();\n        throw new StorageError(\n          `Failed to list Pinata files: ${errorText}`,\n          \"LIST_FAILED\",\n          \"pinata\",\n        );\n      }\n\n      const result = (await response.json()) as PinataListResponse;\n\n      return result.rows.map((pin) => ({\n        id: pin.id,\n        name: pin.metadata?.name ?? \"Unnamed\",\n        url: `ipfs://${pin.ipfs_pin_hash}`,\n        size: parseInt(String(pin.size), 10) || 0,\n        contentType: \"application/octet-stream\", // Pinata doesn't store content type\n        createdAt: new Date(pin.date_pinned),\n        metadata: pin.metadata?.keyvalues ?? {},\n      }));\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Pinata list error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"LIST_ERROR\",\n        \"pinata\",\n      );\n    }\n  }\n\n  /**\n   * Deletes a file from Pinata by unpinning it from IPFS\n   *\n   * @remarks\n   * This method removes the file from your Pinata account by unpinning it,\n   * which means it will no longer be guaranteed to be available on the IPFS network.\n   * Note that if the file is pinned elsewhere or cached by other nodes, it may still\n   * be accessible for some time.\n   *\n   * @param url - The IPFS URL or content identifier of the file to delete\n   * @returns Promise that resolves when the file is successfully unpinned\n   * @throws {StorageError} When the deletion fails or CID format is invalid\n   *\n   * @example\n   * ```typescript\n   * // Delete a file by CID\n   * await pinataStorage.delete(\"QmTzQ1JRkWErjk39mryYw2WVrgBMe2B36gRq8GCL8qCACj\");\n   * console.log(\"File unpinned from Pinata\");\n   *\n   * // Delete after listing\n   * const files = await pinataStorage.list();\n   * for (const file of files) {\n   *   if (file.name.includes(\"temp\")) {\n   *     await pinataStorage.delete(file.cid);\n   *   }\n   * }\n   * ```\n   */\n  async delete(url: string): Promise<boolean> {\n    try {\n      // Extract CID from URL or use as-is\n      const cid = this.extractCidFromUrl(url);\n\n      // Validate CID format\n      if (!this.isValidCID(cid)) {\n        throw new StorageError(\n          \"Invalid IPFS CID format\",\n          \"INVALID_CID\",\n          \"pinata\",\n        );\n      }\n\n      const response = await fetch(`${this.apiUrl}/pinning/unpin/${cid}`, {\n        method: \"DELETE\",\n        headers: {\n          Authorization: `Bearer ${this.config.jwt}`,\n        },\n      });\n\n      if (!response.ok) {\n        const errorText = await response.text();\n        throw new StorageError(\n          `Failed to delete from Pinata: ${errorText}`,\n          \"DELETE_FAILED\",\n          \"pinata\",\n        );\n      }\n\n      return true;\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Pinata delete error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n        \"DELETE_ERROR\",\n        \"pinata\",\n      );\n    }\n  }\n\n  getConfig(): StorageProviderConfig {\n    return {\n      name: \"Pinata IPFS\",\n      type: \"pinata\",\n      requiresAuth: true,\n      features: {\n        upload: true,\n        download: true,\n        list: true,\n        delete: true,\n      },\n    };\n  }\n\n  /**\n   * Extract CID from URL or return as-is\n   *\n   * @param url - URL or CID string\n   * @returns CID string\n   */\n  private extractCidFromUrl(url: string): string {\n    // If it's already a CID (not a URL), return as-is\n    if (!url.includes(\"/\")) {\n      return url;\n    }\n\n    // Extract CID from gateway URL\n    const cidMatch = url.match(/\\/ipfs\\/([a-zA-Z0-9]+)/);\n    if (cidMatch) {\n      return cidMatch[1];\n    }\n\n    // If no match, assume it's a CID\n    return url;\n  }\n\n  /**\n   * Basic CID validation\n   *\n   * @param cid - Content identifier to validate\n   * @returns True if CID appears valid\n   */\n  private isValidCID(cid: string): boolean {\n    // Basic validation: CIDs typically start with 'Qm' or 'ba' and contain alphanumeric characters\n    return (\n      /^[a-zA-Z0-9]{10,}$/.test(cid) &&\n      (cid.startsWith(\"Qm\") || cid.startsWith(\"ba\") || cid.includes(\"Test\"))\n    );\n  }\n}\n", "/**\n * Provides user-defined storage operations through callback functions.\n *\n * @remarks\n * This module implements a flexible storage provider that delegates all\n * operations to user-provided callbacks. It enables custom storage\n * integrations without modifying the SDK, supporting any backend including\n * HTTP APIs, WebSocket servers, cloud storage services, or local filesystems.\n *\n * @category Storage\n * @module storage/providers/callback-storage\n */\n\nimport type { StorageCallbacks } from \"../../types/config\";\nimport {\n  StorageError,\n  type StorageProvider,\n  type StorageUploadResult,\n  type StorageFile,\n  type StorageListOptions,\n  type StorageProviderConfig,\n} from \"../../types/storage\";\n\n/**\n * Delegates storage operations to user-provided callback functions.\n *\n * @remarks\n * This provider enables custom storage integrations by delegating all\n * operations to user-defined callbacks. It follows the same flexible\n * pattern as relayer callbacks, allowing implementations via HTTP,\n * WebSocket, direct cloud APIs, local filesystem, or any other backend.\n *\n * The provider validates callback results and wraps errors in consistent\n * `StorageError` types for uniform error handling across the SDK.\n *\n * @example\n * ```typescript\n * // HTTP-based implementation\n * const httpCallbacks: StorageCallbacks = {\n *   async upload(blob, filename) {\n *     const formData = new FormData();\n *     formData.append('file', blob, filename);\n *     const response = await fetch('/api/storage/upload', {\n *       method: 'POST',\n *       body: formData\n *     });\n *     const data = await response.json();\n *     return {\n *       url: data.url,\n *       size: blob.size,\n *       contentType: blob.type\n *     };\n *   },\n *   async download(identifier) {\n *     const response = await fetch(`/api/storage/download/${identifier}`);\n *     return response.blob();\n *   }\n * };\n *\n * const storage = new CallbackStorage(httpCallbacks);\n *\n * // Direct S3 implementation\n * const s3Callbacks: StorageCallbacks = {\n *   async upload(blob, filename) {\n *     const url = await getPresignedUploadUrl(filename);\n *     await fetch(url, { method: 'PUT', body: blob });\n *     return {\n *       url: `s3://my-bucket/${filename}`,\n *       size: blob.size,\n *       contentType: blob.type\n *     };\n *   },\n *   async download(identifier) {\n *     const url = await getPresignedDownloadUrl(identifier);\n *     const response = await fetch(url);\n *     return response.blob();\n *   }\n * };\n * ```\n *\n * @category Storage\n */\nexport class CallbackStorage implements StorageProvider {\n  /**\n   * Creates a new callback-based storage provider.\n   *\n   * @param callbacks - User-provided storage operation callbacks.\n   *   Must include at minimum `upload` and `download` functions.\n   * @throws {Error} If required callbacks are missing\n   */\n  constructor(private readonly callbacks: StorageCallbacks) {\n    if (!callbacks.upload || !callbacks.download) {\n      throw new Error(\n        \"CallbackStorage requires both upload and download callbacks\",\n      );\n    }\n  }\n\n  /**\n   * Uploads a file using the user-provided callback.\n   *\n   * @param file - The blob to upload.\n   *   Can be any Blob-compatible object including File.\n   * @param filename - Optional filename for the upload.\n   *   If not provided, callback may generate a name.\n   * @returns Upload result containing URL and metadata\n   *\n   * @throws {StorageError} With code 'INVALID_UPLOAD_RESULT' if callback returns invalid data\n   * @throws {StorageError} With code 'UPLOAD_ERROR' if upload fails\n   *\n   * @example\n   * ```typescript\n   * const file = new File(['content'], 'data.json');\n   * const result = await storage.upload(file);\n   * console.log('Uploaded to:', result.url);\n   * ```\n   */\n  async upload(file: Blob, filename?: string): Promise<StorageUploadResult> {\n    try {\n      const result = await this.callbacks.upload(file, filename);\n\n      // Validate the result has required fields\n      if (!result.url || result.url.trim() === \"\") {\n        throw new StorageError(\n          \"Upload callback returned invalid result: missing or empty url\",\n          \"INVALID_UPLOAD_RESULT\",\n          \"callback-storage\",\n        );\n      }\n\n      return result;\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Upload failed: ${error instanceof Error ? error.message : String(error)}`,\n        \"UPLOAD_ERROR\",\n        \"callback-storage\",\n        { cause: error instanceof Error ? error : undefined },\n      );\n    }\n  }\n\n  /**\n   * Downloads a file using the user-provided callback.\n   *\n   * @param url - The URL or identifier to download.\n   *   If `extractIdentifier` callback is provided, it will be used to extract the identifier.\n   * @returns The downloaded file as a Blob\n   *\n   * @throws {StorageError} With code 'INVALID_DOWNLOAD_RESULT' if callback returns non-Blob\n   * @throws {StorageError} With code 'DOWNLOAD_ERROR' if download fails\n   *\n   * @example\n   * ```typescript\n   * const blob = await storage.download('https://storage.example.com/file123');\n   * const text = await blob.text();\n   * ```\n   */\n  async download(url: string): Promise<Blob> {\n    try {\n      // Extract identifier if callback is provided, otherwise use URL as-is\n      const identifier = this.callbacks.extractIdentifier\n        ? this.callbacks.extractIdentifier(url)\n        : url;\n\n      const blob = await this.callbacks.download(identifier);\n\n      if (!(blob instanceof Blob)) {\n        throw new StorageError(\n          \"Download callback returned invalid result: expected Blob\",\n          \"INVALID_DOWNLOAD_RESULT\",\n          \"callback-storage\",\n        );\n      }\n\n      return blob;\n    } catch (error) {\n      if (error instanceof StorageError) {\n        throw error;\n      }\n      throw new StorageError(\n        `Download failed: ${error instanceof Error ? error.message : String(error)}`,\n        \"DOWNLOAD_ERROR\",\n        \"callback-storage\",\n        { cause: error instanceof Error ? error : undefined },\n      );\n    }\n  }\n\n  /**\n   * Lists files using the user-provided callback.\n   *\n   * @param options - Optional list options.\n   * @param options.namePattern - Pattern to filter files by name.\n   *   Implementation depends on callback.\n   * @param options.limit - Maximum number of files to return.\n   *   Implementation depends on callback.\n   * @returns Array of storage file metadata\n   *\n   * @throws {StorageError} With code 'NOT_SUPPORTED' if list callback not provided\n   * @throws {StorageError} With code 'LIST_ERROR' if listing fails\n   *\n   * @remarks\n   * This operation is optional and only available if a `list` callback\n   * is provided during construction.\n   *\n   * @example\n   * ```typescript\n   * const files = await storage.list({ namePattern: '*.json' });\n   * files.forEach(file => console.log(file.name, file.size));\n   * ```\n   */\n  async list(options?: StorageListOptions): Promise<StorageFile[]> {\n    if (!this.callbacks.list) {\n      throw new StorageError(\n        \"List operation not supported - no list callback provided\",\n        \"NOT_SUPPORTED\",\n        \"callback-storage\",\n      );\n    }\n\n    try {\n      const result = await this.callbacks.list(options?.namePattern, options);\n\n      // Convert list result to StorageFile format\n      return result.items.map((item, index) => ({\n        id: item.identifier,\n        name: item.identifier.split(\"/\").pop() ?? `file-${index}`,\n        url: item.identifier,\n        size: item.size ?? 0,\n        contentType: \"application/octet-stream\",\n        createdAt: item.lastModified ?? new Date(),\n        metadata: item.metadata,\n      }));\n    } catch (error) {\n      throw new StorageError(\n        `List failed: ${error instanceof Error ? error.message : String(error)}`,\n        \"LIST_ERROR\",\n        \"callback-storage\",\n        { cause: error instanceof Error ? error : undefined },\n      );\n    }\n  }\n\n  /**\n   * Deletes a file using the user-provided callback.\n   *\n   * @param url - The URL or identifier to delete.\n   *   If `extractIdentifier` callback is provided, it will be used to extract the identifier.\n   * @returns True if deletion succeeded, false otherwise\n   *\n   * @throws {StorageError} With code 'NOT_SUPPORTED' if delete callback not provided\n   * @throws {StorageError} With code 'DELETE_ERROR' if deletion fails\n   *\n   * @remarks\n   * This operation is optional and only available if a `delete` callback\n   * is provided during construction.\n   *\n   * @example\n   * ```typescript\n   * const deleted = await storage.delete('https://storage.example.com/file123');\n   * if (deleted) {\n   *   console.log('File deleted successfully');\n   * }\n   * ```\n   */\n  async delete(url: string): Promise<boolean> {\n    if (!this.callbacks.delete) {\n      throw new StorageError(\n        \"Delete operation not supported - no delete callback provided\",\n        \"NOT_SUPPORTED\",\n        \"callback-storage\",\n      );\n    }\n\n    try {\n      // Extract identifier if callback is provided, otherwise use URL as-is\n      const identifier = this.callbacks.extractIdentifier\n        ? this.callbacks.extractIdentifier(url)\n        : url;\n\n      return await this.callbacks.delete(identifier);\n    } catch (error) {\n      throw new StorageError(\n        `Delete failed: ${error instanceof Error ? error.message : String(error)}`,\n        \"DELETE_ERROR\",\n        \"callback-storage\",\n        { cause: error instanceof Error ? error : undefined },\n      );\n    }\n  }\n\n  /**\n   * Returns the provider's configuration and capabilities.\n   *\n   * @returns Configuration object indicating supported features\n   *\n   * @example\n   * ```typescript\n   * const config = storage.getConfig();\n   * if (config.features.list) {\n   *   // List operation is supported\n   *   const files = await storage.list();\n   * }\n   * ```\n   */\n  getConfig(): StorageProviderConfig {\n    return {\n      name: \"callback-storage\",\n      type: \"callback\",\n      requiresAuth: false,\n      features: {\n        upload: true,\n        download: true,\n        list: !!this.callbacks.list,\n        delete: !!this.callbacks.delete,\n      },\n    };\n  }\n}\n", "/**\n * Manages multiple storage providers with a unified interface.\n *\n * @remarks\n * This module provides centralized management of storage providers, enabling\n * applications to work with multiple storage backends through a single API.\n * It handles provider registration, default selection, and operation routing.\n *\n * @category Storage\n * @module storage/manager\n */\n\nimport type {\n  StorageProvider,\n  StorageUploadResult,\n  StorageFile,\n  StorageListOptions,\n} from \"../types/storage\";\nimport { StorageError } from \"../types/storage\";\n\n/**\n * Manages multiple storage providers with a unified interface for file operations.\n *\n * @remarks\n * The StorageManager provides a consistent API for uploading, downloading, and managing\n * files across different storage backends including IPFS, Pinata, Google Drive, and\n * server-managed storage. It handles provider registration, default provider selection,\n * and automatic fallback scenarios for robust file operations.\n *\n * Used internally by DataController for encrypted file storage, but can also be used\n * directly for custom storage workflows. Each provider implements the `StorageProvider`\n * interface to ensure consistent behavior across different storage backends.\n *\n * The manager supports provider-specific configurations and features while maintaining\n * a uniform API surface for applications.\n * @example\n * ```typescript\n * import { StorageManager, IPFSStorage, PinataStorage } from '@opendatalabs/vana-sdk';\n *\n * const storage = new StorageManager();\n *\n * // Register multiple providers\n * storage.register('ipfs', new IPFSStorage({\n *   apiEndpoint: 'https://api.pinata.cloud/pinning/pinFileToIPFS'\n * }), true);\n * storage.register('pinata', new PinataStorage({\n *   jwt: 'your-pinata-jwt-token'\n * }));\n *\n * // Upload to default provider\n * const result = await storage.upload(fileBlob, 'myfile.json');\n *\n * // Upload to specific provider\n * const result2 = await storage.upload(fileBlob, 'myfile.json', 'pinata');\n * ```\n * @category Storage\n * @see {@link https://docs.vana.com/developer/vana-sdk-documentation/core-modules/storage-providers | Storage Providers Guide} for configuration details\n */\nexport class StorageManager {\n  private providers: Map<string, StorageProvider> = new Map();\n  private defaultProvider: string | null = null;\n\n  /**\n   * Registers a storage provider with the manager.\n   *\n   * @remarks\n   * This method adds a new storage provider to the manager's registry and optionally\n   * sets it as the default provider for subsequent operations. If no default provider\n   * is currently set, the first registered provider automatically becomes the default.\n   * @param name - Unique identifier for the provider\n   * @param provider - The storage provider instance implementing the `StorageProvider` interface\n   * @param isDefault - Whether this provider should be set as the default (defaults to `false`)\n   * @example\n   * ```typescript\n   * const pinata = new PinataStorage({ jwt: 'your-jwt-token' });\n   * storage.register('pinata', pinata, true); // Set as default\n   *\n   * const ipfs = new IPFSStorage({ apiEndpoint: 'https://...' });\n   * storage.register('ipfs', ipfs); // Not default\n   * ```\n   */\n  register(name: string, provider: StorageProvider, isDefault = false): void {\n    this.providers.set(name, provider);\n\n    if (isDefault || this.defaultProvider === null) {\n      this.defaultProvider = name;\n    }\n  }\n\n  /**\n   * Retrieves a registered storage provider.\n   *\n   * @param name - Provider identifier.\n   *   If not specified, returns the default provider.\n   * @returns The requested storage provider instance\n   *\n   * @throws {StorageError} With code 'NO_PROVIDER' if no provider available\n   * @throws {StorageError} With code 'PROVIDER_NOT_FOUND' if named provider doesn't exist\n   *\n   * @example\n   * ```typescript\n   * const provider = storage.getProvider('pinata');\n   * const config = provider.getConfig();\n   * ```\n   */\n  getProvider(name?: string): StorageProvider {\n    const providerName = name ?? this.defaultProvider;\n\n    if (!providerName) {\n      throw new StorageError(\n        \"No storage provider specified and no default provider set\",\n        \"NO_PROVIDER\",\n        \"manager\",\n      );\n    }\n\n    const provider = this.providers.get(providerName);\n    if (!provider) {\n      throw new StorageError(\n        `Storage provider '${providerName}' not found`,\n        \"PROVIDER_NOT_FOUND\",\n        \"manager\",\n      );\n    }\n\n    return provider;\n  }\n\n  /**\n   * Lists all registered provider names.\n   *\n   * @returns Array of registered provider identifiers\n   *\n   * @example\n   * ```typescript\n   * const providers = storage.listProviders();\n   * console.log('Available providers:', providers);\n   * // Output: ['ipfs', 'pinata', 'google-drive']\n   * ```\n   */\n  listProviders(): string[] {\n    return Array.from(this.providers.keys());\n  }\n\n  /**\n   * Gets the current default provider name.\n   *\n   * @returns Default provider identifier or null if none set\n   *\n   * @example\n   * ```typescript\n   * const defaultName = storage.getDefaultProvider();\n   * if (defaultName) {\n   *   console.log(`Using ${defaultName} by default`);\n   * }\n   * ```\n   */\n  getDefaultProvider(): string | null {\n    return this.defaultProvider;\n  }\n\n  /**\n   * Sets the default storage provider.\n   *\n   * @param name - Provider identifier to set as default.\n   *   Must be a registered provider name.\n   *\n   * @throws {StorageError} With code 'PROVIDER_NOT_FOUND' if provider not registered\n   *\n   * @example\n   * ```typescript\n   * storage.setDefaultProvider('pinata');\n   * // Now all operations without provider name will use Pinata\n   * ```\n   */\n  setDefaultProvider(name: string): void {\n    if (!this.providers.has(name)) {\n      throw new StorageError(\n        `Cannot set default provider '${name}': provider not registered`,\n        \"PROVIDER_NOT_FOUND\",\n        \"manager\",\n      );\n    }\n    this.defaultProvider = name;\n  }\n\n  /**\n   * Uploads a file using the specified or default storage provider.\n   *\n   * @remarks\n   * This method uploads a file to the specified provider or falls back to the default\n   * provider if none is specified. The upload result includes the storage URL, file size,\n   * content type, and provider-specific metadata that can be used for subsequent operations.\n   * @param file - The file blob to upload\n   * @param filename - Optional custom filename (defaults to auto-generated name)\n   * @param providerName - Optional provider identifier (uses default if not specified)\n   * @returns A Promise that resolves to the storage upload result with URL and metadata\n   * @throws {StorageError} When no provider is available or upload fails\n   * @example\n   * ```typescript\n   * // Upload to default provider\n   * const result = await storage.upload(fileBlob, 'data.json');\n   * console.log(`Uploaded to: ${result.url}`);\n   *\n   * // Upload to specific provider\n   * const result2 = await storage.upload(fileBlob, 'data.json', 'pinata');\n   * ```\n   */\n  async upload(\n    file: Blob,\n    filename?: string,\n    providerName?: string,\n  ): Promise<StorageUploadResult> {\n    const provider = this.getProvider(providerName);\n    return provider.upload(file, filename);\n  }\n\n  /**\n   * Downloads a file from storage.\n   *\n   * @param url - The storage URL to download from.\n   *   Format depends on the storage provider.\n   * @param providerName - Optional provider identifier.\n   *   Uses default provider if not specified.\n   * @returns The downloaded file as a Blob\n   *\n   * @throws {StorageError} If download fails or provider unavailable\n   *\n   * @example\n   * ```typescript\n   * const blob = await storage.download('ipfs://QmXxx...');\n   * const text = await blob.text();\n   * ```\n   */\n  async download(url: string, providerName?: string): Promise<Blob> {\n    const provider = this.getProvider(providerName);\n    return provider.download(url);\n  }\n\n  /**\n   * Lists files in storage.\n   *\n   * @param options - Optional filtering and pagination.\n   * @param options.namePattern - Pattern to filter files.\n   * @param options.limit - Maximum files to return.\n   * @param providerName - Optional provider identifier.\n   *   Uses default provider if not specified.\n   * @returns Array of file metadata\n   *\n   * @throws {StorageError} If listing fails or not supported by provider\n   *\n   * @example\n   * ```typescript\n   * const files = await storage.list(\n   *   { namePattern: '*.json', limit: 10 },\n   *   'google-drive'\n   * );\n   * ```\n   */\n  async list(\n    options?: StorageListOptions,\n    providerName?: string,\n  ): Promise<StorageFile[]> {\n    const provider = this.getProvider(providerName);\n    return provider.list(options);\n  }\n\n  /**\n   * Deletes a file from storage.\n   *\n   * @param url - The storage URL to delete.\n   *   Must be a valid URL for the provider.\n   * @param providerName - Optional provider identifier.\n   *   Uses default provider if not specified.\n   * @returns True if deletion succeeded, false otherwise\n   *\n   * @throws {StorageError} If deletion fails or not supported by provider\n   *\n   * @example\n   * ```typescript\n   * const success = await storage.delete('ipfs://QmXxx...');\n   * if (success) {\n   *   console.log('File deleted successfully');\n   * }\n   * ```\n   */\n  async delete(url: string, providerName?: string): Promise<boolean> {\n    const provider = this.getProvider(providerName);\n    return provider.delete(url);\n  }\n\n  /**\n   * Gets all registered storage provider names.\n   *\n   * @returns Array of provider identifiers\n   *\n   * @deprecated Use `listProviders()` instead\n   *\n   * @example\n   * ```typescript\n   * const providers = storage.getStorageProviders();\n   * ```\n   */\n  getStorageProviders(): string[] {\n    return Array.from(this.providers.keys());\n  }\n\n  /**\n   * Gets the default storage provider name.\n   *\n   * @returns Default provider identifier or undefined if none set\n   *\n   * @deprecated Use `getDefaultProvider()` instead\n   *\n   * @example\n   * ```typescript\n   * const defaultProvider = storage.getDefaultStorageProvider();\n   * ```\n   */\n  getDefaultStorageProvider(): string | undefined {\n    return this.defaultProvider ?? undefined;\n  }\n}\n", "/**\n * Provides Node.js-specific implementations of platform abstraction interfaces.\n *\n * @remarks\n * This module implements all platform-specific operations for Node.js environments,\n * including cryptography, PGP operations, HTTP requests, and caching. It dynamically\n * imports dependencies to avoid Turbopack TDZ issues and uses a custom ECIES\n * implementation with native secp256k1 for optimal performance.\n *\n * WARNING: Dependencies that access globals during init MUST be dynamically imported\n * to support Turbopack. See: https://github.com/vercel/next.js/issues/82632\n *\n * @example\n * ```typescript\n * // Use the Node.js platform adapter\n * import { nodePlatformAdapter} from '@vana-sdk/platform/node';\n *\n * // Encrypt data with public key\n * const encrypted = await nodePlatformAdapter.crypto.encryptWithPublicKey(\n *   'sensitive data',\n *   '0x04...' // Public key hex\n * );\n *\n * // Generate PGP key pair\n * const { publicKey, privateKey } = await nodePlatformAdapter.pgp.generateKeyPair({\n *   name: 'Data Owner',\n *   email: 'owner@example.com'\n * });\n * ```\n *\n * @category Platform\n * @module platform/node\n */\n\nimport type {\n  VanaPlatformAdapter,\n  VanaCryptoAdapter,\n  VanaPGPAdapter,\n  VanaHttpAdapter,\n  VanaCacheAdapter,\n} from \"./interface\";\nimport { getPGPKeyGenParams } from \"./shared/pgp-utils\";\nimport { wrapCryptoError } from \"./shared/error-utils\";\nimport { streamToUint8Array } from \"./shared/stream-utils\";\nimport { lazyImport } from \"../utils/lazy-import\";\nimport { WalletKeyEncryptionService } from \"../crypto/services/WalletKeyEncryptionService\";\nimport {\n  processWalletPrivateKey,\n  parseEncryptedDataBuffer,\n  processWalletPublicKey,\n} from \"../utils/crypto-utils\";\n\n// Lazy-loaded dependencies to avoid Turbopack TDZ issues\nconst getOpenPGP = lazyImport(() => import(\"openpgp\"));\n\n// Import ECIES implementation\nimport { NodeECIESUint8Provider } from \"../crypto/ecies/node\";\nimport { ECIESError } from \"../crypto/ecies/interface\";\nimport type { ECIESEncrypted } from \"../crypto/ecies\";\nimport { randomBytes } from \"crypto\";\nimport secp256k1Import from \"secp256k1\";\n\n// Type definition for secp256k1 module\ninterface Secp256k1Module {\n  privateKeyVerify(privateKey: Buffer): boolean;\n  publicKeyCreate(privateKey: Buffer, compressed: boolean): Buffer;\n  publicKeyVerify(publicKey: Buffer): boolean;\n  publicKeyConvert(publicKey: Buffer, compressed: boolean): Buffer;\n  ecdh(\n    publicKey: Buffer,\n    privateKey: Buffer,\n    options: {\n      hashfn: (x: Uint8Array, y: Uint8Array, output?: Uint8Array) => Uint8Array;\n    },\n    output: Buffer,\n  ): Buffer;\n}\n\n/**\n * Implements cryptographic operations for Node.js environments.\n *\n * @remarks\n * Provides ECIES encryption/decryption, key generation, and password-based\n * encryption using a custom ECIES implementation with native secp256k1.\n *\n * @internal\n */\nclass NodeCryptoAdapter implements VanaCryptoAdapter {\n  private eciesProvider = new NodeECIESUint8Provider();\n  private walletService = new WalletKeyEncryptionService({\n    eciesProvider: this.eciesProvider,\n  });\n\n  /**\n   * Encrypts data using ECIES with a public key.\n   *\n   * @param data - The plaintext string to encrypt.\n   *   Typically user data or sensitive information.\n   * @param publicKeyHex - The recipient's public key in hex format.\n   *   Obtain from key generation or user profile.\n   * @returns Encrypted data as a hex string containing IV, ephemeral key, ciphertext, and MAC\n   *\n   * @throws {Error} If encryption fails or public key is invalid\n   */\n  async encryptWithPublicKey(\n    data: string,\n    publicKeyHex: string,\n  ): Promise<string> {\n    try {\n      // Process public key to handle 0x prefix and convert to Buffer\n      const publicKeyBytes = processWalletPublicKey(publicKeyHex);\n      const publicKey = Buffer.from(publicKeyBytes);\n      const message = Buffer.from(data, \"utf8\");\n\n      const encrypted = await this.eciesProvider.encrypt(publicKey, message);\n\n      // Concatenate all components and return as hex string for API consistency\n      const result = Buffer.concat([\n        encrypted.iv,\n        encrypted.ephemPublicKey,\n        encrypted.ciphertext,\n        encrypted.mac,\n      ]);\n\n      return result.toString(\"hex\");\n    } catch (error) {\n      if (error instanceof ECIESError) {\n        throw error;\n      }\n      throw new Error(\n        `Encryption failed: ${error instanceof Error ? error.message : String(error)}`,\n      );\n    }\n  }\n\n  /**\n   * Decrypts ECIES-encrypted data using a private key.\n   *\n   * @param encryptedData - Hex string containing encrypted data.\n   *   Must include IV, ephemeral public key, ciphertext, and MAC.\n   * @param privateKeyHex - The private key in hex format.\n   *   Must correspond to the public key used for encryption.\n   * @returns The decrypted plaintext string\n   *\n   * @throws {Error} If decryption fails or MAC verification fails\n   * @throws {ECIESError} If using custom ECIES and specific error occurs\n   */\n  async decryptWithPrivateKey(\n    encryptedData: string,\n    privateKeyHex: string,\n  ): Promise<string> {\n    try {\n      const privateKeyBuffer = processWalletPrivateKey(privateKeyHex);\n      // Handle 0x prefix in encrypted data (e.g., from viem's toHex)\n      const encryptedHex = encryptedData.startsWith(\"0x\")\n        ? encryptedData.slice(2)\n        : encryptedData;\n      const encryptedBuffer = Buffer.from(encryptedHex, \"hex\");\n      const { iv, ephemPublicKey, ciphertext, mac } =\n        parseEncryptedDataBuffer(encryptedBuffer);\n\n      // Reconstruct the encrypted data structure\n      const encryptedObj: ECIESEncrypted = {\n        iv,\n        ephemPublicKey,\n        ciphertext,\n        mac,\n      };\n\n      const decrypted = await this.eciesProvider.decrypt(\n        privateKeyBuffer,\n        encryptedObj,\n      );\n      return new TextDecoder().decode(decrypted);\n    } catch (error) {\n      if (error instanceof ECIESError) {\n        throw error;\n      }\n      throw new Error(\n        `Decryption failed: ${error instanceof Error ? error.message : String(error)}`,\n      );\n    }\n  }\n\n  /**\n   * Generates a new secp256k1 key pair for ECIES operations.\n   *\n   * @returns Object containing hex-encoded public and private keys\n   * @returns returns.publicKey - Compressed public key in hex format\n   * @returns returns.privateKey - Private key in hex format\n   *\n   * @throws {Error} If key generation fails\n   */\n  async generateKeyPair(): Promise<{ publicKey: string; privateKey: string }> {\n    try {\n      const secp256k1 = secp256k1Import as unknown as Secp256k1Module;\n\n      // Generate private key\n      let privateKey: Buffer;\n      do {\n        privateKey = randomBytes(32);\n      } while (!secp256k1.privateKeyVerify(privateKey));\n\n      // Get compressed public key\n      const publicKey = Buffer.from(\n        secp256k1.publicKeyCreate(privateKey, true),\n      );\n\n      return {\n        privateKey: privateKey.toString(\"hex\"),\n        publicKey: publicKey.toString(\"hex\"),\n      };\n    } catch (error) {\n      throw wrapCryptoError(\"key generation\", error);\n    }\n  }\n\n  /**\n   * Encrypts data using a wallet's public key.\n   *\n   * @param data - The plaintext string to encrypt.\n   *   Typically permission data or DLP metadata.\n   * @param publicKey - The wallet's public key (with or without 0x prefix).\n   *   Obtain from wallet connection or user profile.\n   * @returns Encrypted data as a hex string\n   *\n   * @throws {Error} If encryption fails or key processing fails\n   */\n  async encryptWithWalletPublicKey(\n    data: string,\n    publicKey: string,\n  ): Promise<string> {\n    try {\n      return await this.walletService.encryptWithWalletPublicKey(\n        data,\n        publicKey,\n      );\n    } catch (error) {\n      throw wrapCryptoError(\"encrypt with wallet public key\", error);\n    }\n  }\n\n  /**\n   * Decrypts data using a wallet's private key.\n   *\n   * @param encryptedData - Hex string containing encrypted data.\n   *   Must be encrypted with corresponding wallet public key.\n   * @param privateKey - The wallet's private key.\n   *   Obtain from wallet connection (handle with care).\n   * @returns The decrypted plaintext string\n   *\n   * @throws {Error} If decryption fails or key is invalid\n   */\n  async decryptWithWalletPrivateKey(\n    encryptedData: string,\n    privateKey: string,\n  ): Promise<string> {\n    try {\n      return await this.walletService.decryptWithWalletPrivateKey(\n        encryptedData,\n        privateKey,\n      );\n    } catch (error) {\n      throw wrapCryptoError(\"decrypt with wallet private key\", error);\n    }\n  }\n\n  /**\n   * Encrypts binary data using password-based encryption.\n   *\n   * @param data - Binary data to encrypt.\n   *   Typically file contents or serialized objects.\n   * @param password - Password for encryption.\n   *   Often derived from wallet signatures.\n   * @returns Encrypted data as Uint8Array\n   *\n   * @remarks\n   * Uses OpenPGP for password-based encryption. Note that this is not\n   * deterministic due to OpenPGP's random salt generation.\n   *\n   * @throws {Error} If encryption fails\n   */\n  async encryptWithPassword(\n    data: Uint8Array,\n    password: string,\n  ): Promise<Uint8Array> {\n    try {\n      const openpgp = await getOpenPGP();\n      const message = await openpgp.createMessage({\n        binary: data,\n      });\n\n      // Use password-based encryption with wallet signature as password\n      // Note: For deterministic encryption, we would need to control the salt\n      // This implementation is secure but not deterministic due to OpenPGP's design\n      const encrypted = await openpgp.encrypt({\n        message,\n        passwords: [password],\n        format: \"binary\",\n      });\n\n      // In Node.js, the encrypted result is already a Uint8Array\n      if (encrypted instanceof Uint8Array) {\n        return encrypted;\n      }\n\n      // If it's a stream (should not happen with format: \"binary\"), read it\n      if (\n        encrypted &&\n        typeof encrypted === \"object\" &&\n        \"getReader\" in encrypted\n      ) {\n        return await streamToUint8Array(\n          encrypted as ReadableStream<Uint8Array>,\n        );\n      }\n\n      throw new Error(\"Unexpected encrypted data format\");\n    } catch (error) {\n      throw wrapCryptoError(\"encrypt with password\", error);\n    }\n  }\n\n  /**\n   * Decrypts password-encrypted binary data.\n   *\n   * @param encryptedData - Password-encrypted data as Uint8Array.\n   *   Must be encrypted with the same password.\n   * @param password - Password for decryption.\n   *   Must match the encryption password.\n   * @returns Decrypted data as Uint8Array\n   *\n   * @throws {Error} If decryption fails or password is incorrect\n   */\n  async decryptWithPassword(\n    encryptedData: Uint8Array,\n    password: string,\n  ): Promise<Uint8Array> {\n    try {\n      const openpgp = await getOpenPGP();\n      const message = await openpgp.readMessage({\n        binaryMessage: encryptedData,\n      });\n\n      // Use password-based decryption with wallet signature as password\n      const { data: decrypted } = await openpgp.decrypt({\n        message,\n        passwords: [password],\n        format: \"binary\",\n      });\n\n      // Convert decrypted data back to Uint8Array\n      return new Uint8Array(decrypted as ArrayBuffer);\n    } catch (error) {\n      throw wrapCryptoError(\"decrypt with password\", error);\n    }\n  }\n}\n\n/**\n * Implements PGP operations for Node.js environments.\n *\n * @remarks\n * Provides PGP encryption, decryption, and key generation using the OpenPGP.js\n * library with Node.js-specific optimizations like zlib compression.\n *\n * @internal\n */\nclass NodePGPAdapter implements VanaPGPAdapter {\n  /**\n   * Encrypts data using PGP public key encryption.\n   *\n   * @param data - The plaintext string to encrypt.\n   *   Typically messages or structured data.\n   * @param publicKeyArmored - ASCII-armored PGP public key.\n   *   Obtain from PGP key generation or key servers.\n   * @returns ASCII-armored encrypted message\n   *\n   * @throws {Error} If encryption fails or public key is invalid\n   */\n  async encrypt(data: string, publicKeyArmored: string): Promise<string> {\n    try {\n      const openpgp = await getOpenPGP();\n      const publicKey = await openpgp.readKey({ armoredKey: publicKeyArmored });\n\n      const encrypted = await openpgp.encrypt({\n        message: await openpgp.createMessage({ text: data }),\n        encryptionKeys: publicKey,\n        config: {\n          preferredCompressionAlgorithm: openpgp.enums.compression.zlib,\n        },\n      });\n\n      return encrypted as string;\n    } catch (error) {\n      throw wrapCryptoError(\"PGP encryption\", error);\n    }\n  }\n\n  /**\n   * Decrypts PGP-encrypted data using a private key.\n   *\n   * @param encryptedData - ASCII-armored encrypted message.\n   *   Must be encrypted with corresponding public key.\n   * @param privateKeyArmored - ASCII-armored PGP private key.\n   *   Must correspond to the public key used for encryption.\n   * @returns The decrypted plaintext string\n   *\n   * @throws {Error} If decryption fails or private key is invalid\n   */\n  async decrypt(\n    encryptedData: string,\n    privateKeyArmored: string,\n  ): Promise<string> {\n    try {\n      const openpgp = await getOpenPGP();\n      const privateKey = await openpgp.readPrivateKey({\n        armoredKey: privateKeyArmored,\n      });\n      const message = await openpgp.readMessage({\n        armoredMessage: encryptedData,\n      });\n\n      const { data: decrypted } = await openpgp.decrypt({\n        message,\n        decryptionKeys: privateKey,\n      });\n\n      return decrypted as string;\n    } catch (error) {\n      throw wrapCryptoError(\"PGP decryption\", error);\n    }\n  }\n\n  /**\n   * Generates a new PGP key pair.\n   *\n   * @param options - Key generation options\n   * @param options.name - Name for the key identity.\n   *   Defaults to 'Vana User'.\n   * @param options.email - Email for the key identity.\n   *   Defaults to 'user@vana.com'.\n   * @param options.passphrase - Passphrase to protect the private key.\n   *   If not provided, key is unprotected.\n   * @returns ASCII-armored public and private keys\n   *\n   * @throws {Error} If key generation fails\n   */\n  async generateKeyPair(options?: {\n    name?: string;\n    email?: string;\n    passphrase?: string;\n  }): Promise<{ publicKey: string; privateKey: string }> {\n    try {\n      const openpgp = await getOpenPGP();\n      // Use shared utility to get standardized parameters\n      const keyGenParams = getPGPKeyGenParams(options);\n\n      const { privateKey, publicKey } = await openpgp.generateKey(keyGenParams);\n\n      return { publicKey, privateKey };\n    } catch (error) {\n      throw wrapCryptoError(\"PGP key generation\", error);\n    }\n  }\n}\n\n/**\n * Implements HTTP operations for Node.js environments.\n *\n * @remarks\n * Provides fetch functionality using the global fetch if available,\n * suitable for Node.js 18+ or environments with fetch polyfills.\n *\n * @internal\n */\nclass NodeHttpAdapter implements VanaHttpAdapter {\n  /**\n   * Performs an HTTP request using fetch.\n   *\n   * @param url - The URL to fetch.\n   *   Must be a valid HTTP/HTTPS URL.\n   * @param options - Standard fetch options.\n   *   See MDN fetch documentation for details.\n   * @returns Standard fetch Response object\n   *\n   * @throws {Error} If fetch is not available in the environment\n   */\n  async fetch(url: string, options?: RequestInit): Promise<Response> {\n    if (typeof globalThis.fetch !== \"undefined\") {\n      return globalThis.fetch(url, options);\n    }\n\n    throw new Error(\"No fetch implementation available in Node.js environment\");\n  }\n}\n\n/**\n * Implements in-memory caching for Node.js environments.\n *\n * @remarks\n * Provides a simple TTL-based cache using a Map. Cached values expire\n * after 2 hours by default. This cache is not persistent and will be\n * cleared when the process exits.\n *\n * @internal\n */\nclass NodeCacheAdapter implements VanaCacheAdapter {\n  private cache = new Map<string, { value: string; expires: number }>();\n  private readonly defaultTtl = 2 * 60 * 60 * 1000; // 2 hours in milliseconds\n\n  /**\n   * Retrieves a cached value by key.\n   *\n   * @param key - The cache key to look up.\n   *   Typically derived from operation parameters.\n   * @returns The cached value or null if not found/expired\n   */\n  get(key: string): string | null {\n    const entry = this.cache.get(key);\n    if (!entry) {\n      return null;\n    }\n\n    // Check if expired\n    if (Date.now() > entry.expires) {\n      this.cache.delete(key);\n      return null;\n    }\n\n    return entry.value;\n  }\n\n  /**\n   * Stores a value in the cache with TTL.\n   *\n   * @param key - The cache key.\n   *   Should be unique per operation.\n   * @param value - The value to cache.\n   *   Typically serialized data or signatures.\n   */\n  set(key: string, value: string): void {\n    this.cache.set(key, {\n      value,\n      expires: Date.now() + this.defaultTtl,\n    });\n  }\n\n  /**\n   * Removes a specific key from the cache.\n   *\n   * @param key - The cache key to remove.\n   *   Use when cached data becomes invalid.\n   */\n  delete(key: string): void {\n    this.cache.delete(key);\n  }\n\n  /**\n   * Clears all cached values.\n   *\n   * @remarks\n   * Use with caution as this removes all cached signatures\n   * and other performance optimizations.\n   */\n  clear(): void {\n    this.cache.clear();\n  }\n}\n\n/**\n * Provides complete platform abstraction for Node.js environments.\n *\n * @remarks\n * This adapter aggregates all Node.js-specific implementations of platform\n * operations using a custom ECIES implementation with native secp256k1 for\n * optimal performance and provides consistent APIs across all operations.\n *\n * @example\n * ```typescript\n * // Create a custom Node.js adapter instance\n * const adapter = new NodePlatformAdapter();\n *\n * // Use for encryption\n * const encrypted = await adapter.crypto.encryptWithPublicKey(\n *   'secret data',\n *   publicKeyHex\n * );\n *\n * // Use for caching\n * adapter.cache.set('signature_key', signatureValue);\n * ```\n *\n * @category Platform\n */\nexport class NodePlatformAdapter implements VanaPlatformAdapter {\n  crypto: VanaCryptoAdapter;\n  pgp: VanaPGPAdapter;\n  http: VanaHttpAdapter;\n  cache: VanaCacheAdapter;\n  platform: \"node\" = \"node\" as const;\n\n  constructor() {\n    this.crypto = new NodeCryptoAdapter();\n    this.pgp = new NodePGPAdapter();\n    this.http = new NodeHttpAdapter();\n    this.cache = new NodeCacheAdapter();\n  }\n}\n\n/**\n * Pre-configured Node.js platform adapter instance.\n *\n * @remarks\n * This singleton instance is the default adapter used by the SDK when\n * running in Node.js environments. It's automatically selected based on\n * platform detection.\n *\n * @example\n * ```typescript\n * import { nodePlatformAdapter } from '@vana-sdk/platform/node';\n *\n * // Use directly for platform operations\n * const keys = await nodePlatformAdapter.crypto.generateKeyPair();\n * ```\n *\n * @category Platform\n */\nexport const nodePlatformAdapter: VanaPlatformAdapter =\n  new NodePlatformAdapter();\n", "/**\n * Shared stream utilities for platform adapters\n *\n * IMPORTANT: This module contains NO IMPORTS to avoid affecting bundle loading.\n * All functions are pure utilities that can be safely shared across platforms.\n */\n\n/**\n * Convert ReadableStream to Uint8Array\n * Used primarily in Node.js environment where OpenPGP may return streams\n *\n * @param stream The ReadableStream to convert\n * @returns Promise resolving to Uint8Array containing all stream data\n */\nexport async function streamToUint8Array(\n  stream: ReadableStream<Uint8Array>,\n): Promise<Uint8Array> {\n  const reader = stream.getReader();\n  const chunks: Uint8Array[] = [];\n\n  try {\n    while (true) {\n      const { done, value } = await reader.read();\n      if (done) break;\n      chunks.push(value);\n    }\n  } finally {\n    reader.releaseLock();\n  }\n\n  // Concatenate all chunks\n  const totalLength = chunks.reduce((acc, chunk) => acc + chunk.length, 0);\n  const result = new Uint8Array(totalLength);\n  let offset = 0;\n  for (const chunk of chunks) {\n    result.set(chunk, offset);\n    offset += chunk.length;\n  }\n\n  return result;\n}\n", "/**\n * Node.js implementation of ECIES using native secp256k1 for performance\n *\n * @remarks\n * Uses native secp256k1 bindings for all elliptic curve operations.\n * Uses Node.js crypto module for hashing and AES operations.\n * Provides Uint8Array-only interface with no Buffer exposure.\n */\n\nimport {\n  randomBytes,\n  createHash,\n  createHmac,\n  createCipheriv,\n  createDecipheriv,\n} from \"crypto\";\nimport secp256k1Import from \"secp256k1\";\nimport { BaseECIESUint8 } from \"./base\";\nimport { toHex } from \"viem\";\n\n// Type definition for secp256k1 module\ninterface Secp256k1Module {\n  privateKeyVerify(privateKey: Buffer): boolean;\n  publicKeyCreate(privateKey: Buffer, compressed: boolean): Buffer;\n  publicKeyVerify(publicKey: Buffer): boolean;\n  publicKeyConvert(publicKey: Buffer, compressed: boolean): Buffer;\n  ecdh(\n    publicKey: Buffer,\n    privateKey: Buffer,\n    options: {\n      hashfn: (x: Uint8Array, y: Uint8Array, output?: Uint8Array) => Uint8Array;\n    },\n    output: Buffer,\n  ): Buffer;\n}\n\n// Use the imported secp256k1 module\nconst secp256k1 = secp256k1Import as unknown as Secp256k1Module;\n\n/**\n * Node.js-specific ECIES provider using native secp256k1\n *\n * @remarks\n * This implementation:\n * - Uses native secp256k1 for all EC operations (optimal performance)\n * - Uses Node.js crypto for SHA-512, HMAC, and AES operations\n * - Internally works with Uint8Array\n * - Only uses Buffer at crypto API boundaries\n */\nexport class NodeECIESUint8Provider extends BaseECIESUint8 {\n  // Identity hash function for ECDH - returns raw X coordinate\n  // CRITICAL: Must handle (x, y, output) signature correctly\n  private readonly identityHashFn = (\n    x: Uint8Array,\n    _y: Uint8Array,\n    output?: Uint8Array,\n  ): Uint8Array => {\n    // Copy x into output buffer if provided (prevents allocations)\n    if (output && output.length >= 32) {\n      output.set(x);\n      return output;\n    }\n    return x;\n  };\n  protected generateRandomBytes(length: number): Uint8Array {\n    return new Uint8Array(randomBytes(length));\n  }\n\n  protected verifyPrivateKey(privateKey: Uint8Array): boolean {\n    // Native secp256k1 returns true for valid, false for invalid\n    return secp256k1.privateKeyVerify(Buffer.from(privateKey)) === true;\n  }\n\n  protected createPublicKey(\n    privateKey: Uint8Array,\n    compressed: boolean,\n  ): Uint8Array | null {\n    try {\n      return new Uint8Array(\n        secp256k1.publicKeyCreate(Buffer.from(privateKey), compressed),\n      );\n    } catch {\n      return null;\n    }\n  }\n\n  protected validatePublicKey(publicKey: Uint8Array): boolean {\n    // Native secp256k1 returns true for valid, false for invalid\n    return secp256k1.publicKeyVerify(Buffer.from(publicKey)) === true;\n  }\n\n  protected decompressPublicKey(publicKey: Uint8Array): Uint8Array | null {\n    try {\n      // Convert to uncompressed format (65 bytes)\n      return new Uint8Array(\n        secp256k1.publicKeyConvert(Buffer.from(publicKey), false),\n      );\n    } catch {\n      return null;\n    }\n  }\n\n  protected performECDH(\n    publicKey: Uint8Array,\n    privateKey: Uint8Array,\n  ): Uint8Array {\n    try {\n      // Use pre-allocated buffer for output (32 bytes)\n      const output = Buffer.alloc(32);\n\n      // CRITICAL: Use identity hash to get raw X coordinate\n      // Default would apply SHA256 and break compatibility\n      secp256k1.ecdh(\n        Buffer.from(publicKey),\n        Buffer.from(privateKey),\n        { hashfn: this.identityHashFn },\n        output,\n      );\n\n      return new Uint8Array(output);\n    } catch (error) {\n      throw new Error(\n        `ECDH failed: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n      );\n    }\n  }\n\n  protected sha512(data: Uint8Array): Uint8Array {\n    // Use Node.js crypto for native performance\n    return new Uint8Array(\n      createHash(\"sha512\").update(Buffer.from(data)).digest(),\n    );\n  }\n\n  protected hmacSha256(key: Uint8Array, data: Uint8Array): Uint8Array {\n    // Use Node.js crypto for native performance\n    return new Uint8Array(\n      createHmac(\"sha256\", Buffer.from(key)).update(Buffer.from(data)).digest(),\n    );\n  }\n\n  protected async aesEncrypt(\n    key: Uint8Array,\n    iv: Uint8Array,\n    plaintext: Uint8Array,\n  ): Promise<Uint8Array> {\n    const cipher = createCipheriv(\n      \"aes-256-cbc\",\n      Buffer.from(key),\n      Buffer.from(iv),\n    );\n    const encrypted = Buffer.concat([\n      cipher.update(Buffer.from(plaintext)),\n      cipher.final(),\n    ]);\n    return new Uint8Array(encrypted);\n  }\n\n  protected async aesDecrypt(\n    key: Uint8Array,\n    iv: Uint8Array,\n    ciphertext: Uint8Array,\n  ): Promise<Uint8Array> {\n    const decipher = createDecipheriv(\n      \"aes-256-cbc\",\n      Buffer.from(key),\n      Buffer.from(iv),\n    );\n    const decrypted = Buffer.concat([\n      decipher.update(Buffer.from(ciphertext)),\n      decipher.final(),\n    ]);\n    return new Uint8Array(decrypted);\n  }\n\n  // No Buffer compatibility methods - Uint8Array only public API\n\n  /**\n   * Normalizes a public key to uncompressed format (65 bytes with 0x04 prefix).\n   * Handles compressed (33 bytes) and uncompressed (65 bytes) formats only.\n   *\n   * @remarks\n   * Strict policy: Does not accept 64-byte raw coordinates to avoid masking\n   * malformed data. Callers must provide properly formatted keys.\n   *\n   * @param publicKey - The public key to normalize (33 or 65 bytes)\n   * @returns The normalized uncompressed public key (65 bytes)\n   * @throws {Error} When public key format is invalid or decompression fails\n   */\n  normalizeToUncompressed(publicKey: Uint8Array): Uint8Array {\n    const len = publicKey.length;\n\n    // Already uncompressed\n    if (len === 65 && publicKey[0] === 0x04) {\n      return publicKey;\n    }\n\n    // Compressed - decompress using secp256k1\n    if (len === 33 && (publicKey[0] === 0x02 || publicKey[0] === 0x03)) {\n      const decompressed = this.decompressPublicKey(publicKey);\n      if (!decompressed) {\n        throw new Error(\n          `Failed to decompress public key with prefix ${toHex(publicKey[0])}`,\n        );\n      }\n      return decompressed;\n    }\n\n    // Reject raw coordinates (64 bytes) - require proper formatting\n    if (len === 64) {\n      throw new Error(\n        \"Raw public key coordinates (64 bytes) are not accepted. \" +\n          \"Please provide a properly formatted compressed (33 bytes) or uncompressed (65 bytes) public key.\",\n      );\n    }\n\n    throw new Error(\n      `Invalid public key format: expected compressed (33 bytes) or uncompressed (65 bytes), got ${len} bytes`,\n    );\n  }\n}\n", "/**\n * ECIES Module Entry Point\n *\n * Exports interface and utilities for ECIES encryption/decryption.\n * Platform-specific implementations (BrowserECIESProvider, NodeECIESProvider)\n * are exported from the platform entry points.\n *\n * @remarks\n * Import from platform-specific entry points:\n * - Browser: `import { BrowserECIESProvider, serializeECIES } from '@opendatalabs/vana-sdk/browser'`\n * - Node: `import { NodeECIESProvider, serializeECIES } from '@opendatalabs/vana-sdk/node'`\n *\n * @category Cryptography\n */\n\nexport type { ECIESProvider, ECIESEncrypted, ECIESOptions } from \"./interface\";\n\nexport {\n  ECIESError,\n  isECIESEncrypted,\n  serializeECIES,\n  deserializeECIES,\n} from \"./interface\";\n", "/**\n * Platform detection and adapter utilities\n *\n * This module provides utilities for detecting the current runtime environment\n * and creating appropriate platform adapters automatically.\n */\n\nimport type { VanaPlatformAdapter, PlatformType } from \"./interface\";\n\n/**\n * Detects the current runtime environment\n *\n * @returns The detected platform type\n */\nexport function detectPlatform(): PlatformType {\n  // Check for Node.js environment\n  if (\n    typeof process !== \"undefined\" &&\n    process.versions &&\n    process.versions.node\n  ) {\n    return \"node\";\n  }\n\n  // Check for browser environment\n  if (typeof window !== \"undefined\" && typeof document !== \"undefined\") {\n    return \"browser\";\n  }\n\n  // Default to Node.js if we can't determine (e.g., SSR environments)\n  return \"node\";\n}\n\n/**\n * Creates the appropriate platform adapter based on the current environment\n *\n * @returns A platform adapter instance for the current environment\n * @throws {Error} If platform adapters cannot be imported or created\n */\nexport async function createPlatformAdapter(): Promise<VanaPlatformAdapter> {\n  const platform = detectPlatform();\n\n  try {\n    if (platform === \"node\") {\n      // Check if we're in a browser environment\n      if (typeof window !== \"undefined\") {\n        throw new Error(\n          \"NodePlatformAdapter is not available in browser environments. Use BrowserPlatformAdapter instead.\",\n        );\n      }\n\n      // Use string concatenation to avoid static analysis\n      const moduleName = \"./node\";\n      const { NodePlatformAdapter } = await import(moduleName);\n      return new NodePlatformAdapter();\n    } else {\n      const { BrowserPlatformAdapter } = await import(\"./browser\");\n      return new BrowserPlatformAdapter();\n    }\n  } catch (error) {\n    throw new Error(\n      `Failed to create platform adapter for ${platform}: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n    );\n  }\n}\n\n/**\n * Creates a platform adapter for a specific platform type\n *\n * @param platformType - The platform type to create an adapter for\n * @returns A platform adapter instance for the specified platform\n * @throws {Error} If platform adapters cannot be imported or created\n */\nexport async function createPlatformAdapterFor(\n  platformType: PlatformType,\n): Promise<VanaPlatformAdapter> {\n  try {\n    if (platformType === \"node\") {\n      // Check if we're in a browser environment\n      if (typeof window !== \"undefined\") {\n        throw new Error(\n          \"NodePlatformAdapter is not available in browser environments. Use BrowserPlatformAdapter instead.\",\n        );\n      }\n\n      // Use string concatenation to avoid static analysis\n      const moduleName = \"./node\";\n      const { NodePlatformAdapter } = await import(moduleName);\n      return new NodePlatformAdapter();\n    } else {\n      const { BrowserPlatformAdapter } = await import(\"./browser\");\n      return new BrowserPlatformAdapter();\n    }\n  } catch (error) {\n    throw new Error(\n      `Failed to create platform adapter for ${platformType}: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n    );\n  }\n}\n\n/**\n * Checks if the current environment supports the given platform adapter\n *\n * @param platformType - The platform type to check\n * @returns True if the platform is supported, false otherwise\n */\nexport function isPlatformSupported(platformType: PlatformType): boolean {\n  const currentPlatform = detectPlatform();\n  return currentPlatform === platformType;\n}\n\n/**\n * Gets platform-specific capabilities\n *\n * @returns Object describing available platform capabilities\n */\nexport function getPlatformCapabilities() {\n  const platform = detectPlatform();\n\n  return {\n    platform,\n    crypto: {\n      webCrypto: typeof crypto !== \"undefined\" && crypto.subtle,\n      nodeCrypto:\n        typeof process !== \"undefined\" &&\n        process.versions &&\n        process.versions.node,\n    },\n    fetch:\n      typeof fetch !== \"undefined\" || typeof globalThis.fetch !== \"undefined\",\n    streams: typeof ReadableStream !== \"undefined\",\n  };\n}\n", "/**\n * Browser-safe exports for platform adapters\n *\n * This file provides browser-safe exports that avoid importing Node.js dependencies\n * when bundling for browser environments.\n */\n\nimport type { VanaPlatformAdapter } from \"./interface\";\nimport { BrowserPlatformAdapter } from \"./browser\";\n\n/**\n * Dynamically imports the NodePlatformAdapter only when needed\n * This prevents Node.js modules from being bundled in browser builds\n *\n * @returns Promise resolving to a NodePlatformAdapter instance\n * @throws {Error} If running in a browser environment\n */\nexport async function createNodePlatformAdapter(): Promise<VanaPlatformAdapter> {\n  // Check if we're in a browser environment\n  if (typeof window !== \"undefined\") {\n    throw new Error(\n      \"NodePlatformAdapter is not available in browser environments. Use BrowserPlatformAdapter instead.\",\n    );\n  }\n\n  // Use string concatenation to avoid static analysis during bundling\n  const moduleName = \"./node\";\n  const { NodePlatformAdapter } = await import(moduleName);\n  return new NodePlatformAdapter();\n}\n\n/**\n * Creates a BrowserPlatformAdapter instance\n *\n * @returns A BrowserPlatformAdapter instance\n */\nexport function createBrowserPlatformAdapter(): VanaPlatformAdapter {\n  return new BrowserPlatformAdapter();\n}\n\n/**\n * Browser-safe platform adapter factory\n *\n * @returns Promise resolving to the appropriate platform adapter\n */\nexport async function createPlatformAdapterSafe(): Promise<VanaPlatformAdapter> {\n  // Check if we're in a browser environment\n  if (typeof window !== \"undefined\") {\n    return createBrowserPlatformAdapter();\n  }\n\n  // Check for Node.js environment\n  if (\n    typeof process !== \"undefined\" &&\n    process.versions &&\n    process.versions.node\n  ) {\n    // Only attempt Node.js import if we're not in a browser environment\n    if (typeof window === \"undefined\") {\n      return await createNodePlatformAdapter();\n    }\n  }\n\n  // Default to browser if we can't determine\n  return createBrowserPlatformAdapter();\n}\n\n// Export types\nexport type { VanaPlatformAdapter } from \"./interface\";\nexport type { BrowserPlatformAdapter } from \"./browser\";\n// NodePlatformAdapter type is available through dynamic import to avoid bundling Node.js dependencies\n", "/**\n * HKDF-based key derivation for the Vana Data Portability Protocol.\n *\n * @remarks\n * Ported verbatim from `personal-server-ts` (`packages/core/src/keys/derive.ts`)\n * to keep wire compatibility with the locked DPv1 encryption scheme. The wallet\n * signature over `\"vana-master-key-v1\"` IS the master key material (spec \u00A72.3),\n * and per-scope keys are derived via HKDF-SHA256 with `salt=\"vana\"` and\n * `info=\"scope:{scope}\"`.\n *\n * @category Cryptography\n */\n\nimport { hkdf } from \"@noble/hashes/hkdf\";\nimport { sha256 } from \"@noble/hashes/sha2\";\nimport { recoverMessageAddress } from \"viem\";\n\n/**\n * Canonical message signed by the user's wallet to derive the master key.\n *\n * @remarks\n * NOTE: kept in sync with personal-server-ts. The Vana team's encryption design\n * doc references `\"vana-master-encryption-v1\"`; this implementation uses the\n * shipping value to preserve wire compatibility.\n */\nexport const MASTER_KEY_MESSAGE = \"vana-master-key-v1\";\n\n/**\n * Extracts master key material from an EIP-191 signature over the master key\n * message. The raw 65 signature bytes ARE the master key material.\n *\n * @param signature - 0x-prefixed hex string (65 bytes = 130 hex chars + 0x).\n * @returns 65-byte Uint8Array containing the raw signature bytes.\n */\nexport function deriveMasterKey(signature: `0x${string}`): Uint8Array {\n  const hex = signature.slice(2);\n\n  if (hex.length !== 130) {\n    throw new Error(\n      `Invalid signature length: expected 130 hex chars (65 bytes), got ${hex.length}`,\n    );\n  }\n\n  if (!/^[0-9a-fA-F]+$/.test(hex)) {\n    throw new Error(\"Invalid signature: contains non-hex characters\");\n  }\n\n  const bytes = new Uint8Array(65);\n  for (let i = 0; i < 65; i++) {\n    bytes[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);\n  }\n  return bytes;\n}\n\n/**\n * Recovers the server owner address from a master key signature using EIP-191\n * recovery over {@link MASTER_KEY_MESSAGE}.\n */\nexport async function recoverServerOwner(\n  masterKeySignature: `0x${string}`,\n): Promise<`0x${string}`> {\n  return recoverMessageAddress({\n    message: MASTER_KEY_MESSAGE,\n    signature: masterKeySignature,\n  });\n}\n\n/**\n * Derives a scope-specific 32-byte key via HKDF-SHA256.\n *\n * @remarks\n * Uses `salt=\"vana\"` and `info=\"scope:{scope}\"` per spec \u00A72.3.\n *\n * @param masterKey - 65-byte master key material from {@link deriveMasterKey}.\n * @param scope - Scope identifier (e.g. `\"instagram.profile\"`).\n * @returns 32-byte derived key suitable for symmetric encryption.\n */\nexport function deriveScopeKey(\n  masterKey: Uint8Array,\n  scope: string,\n): Uint8Array {\n  const salt = new TextEncoder().encode(\"vana\");\n  const info = new TextEncoder().encode(`scope:${scope}`);\n  return hkdf(sha256, masterKey, salt, info, 32);\n}\n", "/**\n * Password-based file encryption using OpenPGP, the locked DPv1 envelope.\n *\n * @remarks\n * Ported from `personal-server-ts`\n * (`packages/core/src/storage/encryption/{encrypt,decrypt}.ts`).\n * The binary format must remain byte-compatible with PS \u2014 a vana-sdk encrypt +\n * a personal-server-ts decrypt (and vice versa) must round-trip cleanly.\n *\n * @category Cryptography\n */\n\nimport * as openpgp from \"openpgp\";\n\n/**\n * Encrypt plaintext using OpenPGP password-based encryption.\n *\n * @param plaintext - Bytes to encrypt (e.g. `JSON.stringify` of an envelope).\n * @param password - Hex-encoded scope key (typically from `deriveScopeKey`).\n * @returns OpenPGP-encrypted binary data.\n */\nexport async function encryptWithPassword(\n  plaintext: Uint8Array,\n  password: string,\n): Promise<Uint8Array> {\n  const message = await openpgp.createMessage({ binary: plaintext });\n  const encrypted = await openpgp.encrypt({\n    message,\n    passwords: [password],\n    format: \"binary\",\n  });\n  return encrypted as Uint8Array;\n}\n\n/**\n * Decrypt an OpenPGP password-encrypted binary.\n *\n * @param encrypted - OpenPGP-encrypted binary data.\n * @param password - Hex-encoded scope key.\n * @returns Decrypted plaintext bytes.\n * @throws If the password is wrong or the data is corrupted.\n */\nexport async function decryptWithPassword(\n  encrypted: Uint8Array,\n  password: string,\n): Promise<Uint8Array> {\n  const message = await openpgp.readMessage({ binaryMessage: encrypted });\n  const { data } = await openpgp.decrypt({\n    message,\n    passwords: [password],\n    format: \"binary\",\n  });\n  return data as Uint8Array;\n}\n", "/**\n * Web3Signed Authorization header parsing and verification.\n *\n * @remarks\n * Header format: `\"Web3Signed {base64url(payload)}.{signature}\"`.\n * Payload is JSON with fields `aud`, `method`, `uri`, `bodyHash`, `iat`, `exp`,\n * and optional `grantId`. The signature is EIP-191 over the base64url-encoded\n * payload string.\n *\n * Ported from `personal-server-ts` (`packages/core/src/auth/web3-signed.ts`).\n * Adjusted to be isomorphic (no `Buffer`) and to use SDK-local error types.\n *\n * @category Auth\n */\n\nimport { recoverMessageAddress } from \"viem\";\nimport { fromBase64 } from \"../utils/encoding\";\nimport {\n  MissingAuthError,\n  InvalidSignatureError,\n  ExpiredTokenError,\n} from \"./errors\";\nimport { computeBodyHash } from \"./web3-signed-builder\";\n\nexport interface Web3SignedPayload {\n  aud: string;\n  method: string;\n  uri: string;\n  bodyHash: string;\n  iat: number;\n  exp: number;\n  grantId?: string;\n}\n\nexport interface VerifiedAuth {\n  signer: `0x${string}`;\n  payload: Web3SignedPayload;\n}\n\nconst WEB3_SIGNED_PREFIX = \"Web3Signed \";\nconst CLOCK_SKEW_SECONDS = 60;\n\n/** Decode a base64url string (no padding) to UTF-8. */\nfunction base64urlDecode(input: string): string {\n  let base64 = input.replace(/-/g, \"+\").replace(/_/g, \"/\");\n  const padLength = (4 - (base64.length % 4)) % 4;\n  base64 += \"=\".repeat(padLength);\n  return new TextDecoder().decode(fromBase64(base64));\n}\n\nfunction isFiniteNumber(value: unknown): value is number {\n  return typeof value === \"number\" && Number.isFinite(value);\n}\n\nfunction parsePayload(value: unknown): Web3SignedPayload {\n  if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n    throw new InvalidSignatureError({ reason: \"Invalid payload shape\" });\n  }\n\n  const payload = value as Record<string, unknown>;\n  if (\n    typeof payload[\"aud\"] !== \"string\" ||\n    typeof payload[\"method\"] !== \"string\" ||\n    typeof payload[\"uri\"] !== \"string\" ||\n    typeof payload[\"bodyHash\"] !== \"string\" ||\n    !isFiniteNumber(payload[\"iat\"]) ||\n    !isFiniteNumber(payload[\"exp\"])\n  ) {\n    throw new InvalidSignatureError({ reason: \"Invalid payload claims\" });\n  }\n\n  if (\n    payload[\"grantId\"] !== undefined &&\n    typeof payload[\"grantId\"] !== \"string\"\n  ) {\n    throw new InvalidSignatureError({ reason: \"Invalid grantId claim\" });\n  }\n\n  return {\n    aud: payload[\"aud\"],\n    method: payload[\"method\"],\n    uri: payload[\"uri\"],\n    bodyHash: payload[\"bodyHash\"],\n    iat: payload[\"iat\"],\n    exp: payload[\"exp\"],\n    grantId: payload[\"grantId\"],\n  };\n}\n\n/**\n * Parse a `\"Web3Signed <base64url>.<signature>\"` header value.\n *\n * @throws {MissingAuthError} If the header is missing or empty.\n * @throws {InvalidSignatureError} If the format is invalid.\n */\nexport function parseWeb3SignedHeader(headerValue: string | undefined): {\n  payloadBase64: string;\n  payload: Web3SignedPayload;\n  signature: `0x${string}`;\n} {\n  if (!headerValue) {\n    throw new MissingAuthError();\n  }\n\n  if (!headerValue.startsWith(WEB3_SIGNED_PREFIX)) {\n    throw new InvalidSignatureError({ reason: \"Missing Web3Signed prefix\" });\n  }\n\n  const value = headerValue.slice(WEB3_SIGNED_PREFIX.length);\n  const dotIndex = value.indexOf(\".\");\n  if (dotIndex === -1 || dotIndex === 0 || dotIndex === value.length - 1) {\n    throw new InvalidSignatureError({ reason: \"Invalid header format\" });\n  }\n\n  const payloadBase64 = value.slice(0, dotIndex);\n  const signatureStr = value.slice(dotIndex + 1);\n\n  if (!signatureStr.startsWith(\"0x\")) {\n    throw new InvalidSignatureError({ reason: \"Invalid signature format\" });\n  }\n\n  let payload: Web3SignedPayload;\n  try {\n    const decoded = base64urlDecode(payloadBase64);\n    payload = parsePayload(JSON.parse(decoded));\n  } catch (err) {\n    if (err instanceof InvalidSignatureError) throw err;\n    throw new InvalidSignatureError({ reason: \"Invalid payload encoding\" });\n  }\n\n  return {\n    payloadBase64,\n    payload,\n    signature: signatureStr as `0x${string}`,\n  };\n}\n\n/**\n * Full verification: parse header, recover signer via EIP-191, check claims.\n *\n * @remarks\n * Steps:\n * 1. Parse header to base64url + signature.\n * 2. Recover signer via {@link recoverMessageAddress} (EIP-191) over the base64url payload string.\n * 3. Check `aud === expectedOrigin`, `method === expectedMethod`, `uri === expectedPath`.\n * 4. Optionally check `bodyHash` against `bodyBytes`.\n * 5. Check `iat`/`exp` within a 60s clock skew.\n *\n * @returns The recovered signer address and parsed payload.\n */\nexport async function verifyWeb3Signed(params: {\n  headerValue: string | undefined;\n  expectedOrigin: string;\n  expectedMethod: string;\n  expectedPath: string;\n  bodyBytes?: Uint8Array;\n  now?: number;\n}): Promise<VerifiedAuth> {\n  const { payloadBase64, payload, signature } = parseWeb3SignedHeader(\n    params.headerValue,\n  );\n\n  let signer: `0x${string}`;\n  try {\n    signer = await recoverMessageAddress({\n      message: payloadBase64,\n      signature,\n    });\n  } catch {\n    throw new InvalidSignatureError({ reason: \"Signature recovery failed\" });\n  }\n\n  if (payload.aud !== params.expectedOrigin) {\n    throw new InvalidSignatureError({\n      reason: \"Audience mismatch\",\n      expected: params.expectedOrigin,\n      actual: payload.aud,\n    });\n  }\n\n  if (payload.method !== params.expectedMethod) {\n    throw new InvalidSignatureError({\n      reason: \"Method mismatch\",\n      expected: params.expectedMethod,\n      actual: payload.method,\n    });\n  }\n\n  if (payload.uri !== params.expectedPath) {\n    throw new InvalidSignatureError({\n      reason: \"URI mismatch\",\n      expected: params.expectedPath,\n      actual: payload.uri,\n    });\n  }\n\n  if (params.bodyBytes !== undefined) {\n    const expectedBodyHash = computeBodyHash(params.bodyBytes);\n    if (payload.bodyHash !== expectedBodyHash) {\n      throw new InvalidSignatureError({\n        reason: \"Body hash mismatch\",\n        expected: expectedBodyHash,\n        actual: payload.bodyHash,\n      });\n    }\n  }\n\n  const now = params.now ?? Math.floor(Date.now() / 1000);\n\n  if (payload.exp < now - CLOCK_SKEW_SECONDS) {\n    throw new ExpiredTokenError({ reason: \"Token expired\" });\n  }\n\n  if (payload.iat > now + CLOCK_SKEW_SECONDS) {\n    throw new ExpiredTokenError({ reason: \"Token issued in the future\" });\n  }\n\n  return { signer, payload };\n}\n", "/**\n * PKCE (Proof Key for Code Exchange) primitives per RFC 7636.\n *\n * @remarks\n * Implements the S256 challenge method only. All functions are pure and\n * isomorphic \u2014 they rely on the `crypto.getRandomValues` and\n * `crypto.subtle` Web Crypto APIs available as globals in browsers and\n * Node.js (>= 20).\n *\n * @category Auth\n * @module auth/pkce\n */\n\n// RFC 7636 \u00A74.1 unreserved characters: ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\nconst PKCE_VERIFIER_ALPHABET =\n  \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~\";\n\nconst PKCE_VERIFIER_MIN_LENGTH = 43;\nconst PKCE_VERIFIER_MAX_LENGTH = 128;\nconst PKCE_VERIFIER_DEFAULT_LENGTH = 64;\n\n/**\n * RFC 7636 \u00A74.1 verifier shape: 43-128 unreserved chars.\n *\n * @category Auth\n */\nexport const PKCE_VERIFIER_PATTERN = /^[A-Za-z0-9._~-]{43,128}$/;\n\n/**\n * S256 challenge shape: 43-char base64url (SHA-256 = 32 bytes \u2192 43 chars\n * after base64url-no-padding encoding).\n *\n * @category Auth\n */\nexport const PKCE_CHALLENGE_PATTERN = /^[A-Za-z0-9_-]{43}$/;\n\n/**\n * Throws {@link RangeError} unless `verifier` matches RFC 7636 \u00A74.1.\n *\n * @category Auth\n */\nexport function assertValidPkceVerifier(verifier: string): void {\n  if (!PKCE_VERIFIER_PATTERN.test(verifier)) {\n    throw new RangeError(\n      `PKCE verifier must match RFC 7636 \u00A74.1: ${PKCE_VERIFIER_MIN_LENGTH}-${PKCE_VERIFIER_MAX_LENGTH} unreserved chars [A-Za-z0-9._~-]`,\n    );\n  }\n}\n\n/**\n * Generates a cryptographically random PKCE code verifier.\n *\n * @param length - Verifier length in characters. Must be between 43 and 128\n *   (RFC 7636 \u00A74.1). Defaults to 64.\n * @returns A string of the requested length using only the RFC-allowed\n *   unreserved alphabet.\n */\nexport function generatePkceVerifier(\n  length: number = PKCE_VERIFIER_DEFAULT_LENGTH,\n): string {\n  if (\n    !Number.isInteger(length) ||\n    length < PKCE_VERIFIER_MIN_LENGTH ||\n    length > PKCE_VERIFIER_MAX_LENGTH\n  ) {\n    throw new RangeError(\n      `PKCE verifier length must be an integer between ${PKCE_VERIFIER_MIN_LENGTH} and ${PKCE_VERIFIER_MAX_LENGTH}`,\n    );\n  }\n\n  const alphabetLen = PKCE_VERIFIER_ALPHABET.length;\n  // Reject-sample to avoid modulo bias from a non-power-of-two alphabet (66).\n  const acceptCutoff = Math.floor(256 / alphabetLen) * alphabetLen;\n\n  const out = new Array<string>(length);\n  let filled = 0;\n  const buffer = new Uint8Array(length * 2);\n\n  while (filled < length) {\n    crypto.getRandomValues(buffer);\n    for (let i = 0; i < buffer.length && filled < length; i++) {\n      const byte = buffer[i] as number;\n      if (byte < acceptCutoff) {\n        out[filled++] = PKCE_VERIFIER_ALPHABET[byte % alphabetLen] as string;\n      }\n    }\n  }\n\n  return out.join(\"\");\n}\n\n/**\n * Computes the S256 PKCE code challenge for a verifier.\n *\n * @param verifier - The PKCE code verifier.\n * @returns The base64url-encoded SHA-256 hash of the verifier (no padding).\n */\nexport async function computePkceChallenge(verifier: string): Promise<string> {\n  assertValidPkceVerifier(verifier);\n  const bytes = new TextEncoder().encode(verifier);\n  const digest = await crypto.subtle.digest(\"SHA-256\", bytes);\n  return base64UrlEncode(new Uint8Array(digest));\n}\n\n/**\n * Verifies that a verifier hashes to the given S256 challenge.\n *\n * @param verifier - The PKCE code verifier presented by the client.\n * @param challenge - The previously stored S256 challenge.\n * @returns `true` when the verifier matches; `false` otherwise.\n */\nexport async function verifyPkceChallenge(\n  verifier: string,\n  challenge: string,\n): Promise<boolean> {\n  if (!PKCE_VERIFIER_PATTERN.test(verifier)) return false;\n  if (!PKCE_CHALLENGE_PATTERN.test(challenge)) return false;\n  const computed = await computePkceChallenge(verifier);\n  return constantTimeEqualString(computed, challenge);\n}\n\nfunction base64UrlEncode(bytes: Uint8Array): string {\n  let binary = \"\";\n  for (let i = 0; i < bytes.length; i++) {\n    binary += String.fromCharCode(bytes[i] as number);\n  }\n  // btoa is available in Node 16+ and all browsers.\n  return btoa(binary)\n    .replace(/\\+/g, \"-\")\n    .replace(/\\//g, \"_\")\n    .replace(/=+$/, \"\");\n}\n\nfunction constantTimeEqualString(a: string, b: string): boolean {\n  if (a.length !== b.length) return false;\n  let result = 0;\n  for (let i = 0; i < a.length; i++) {\n    result |= a.charCodeAt(i) ^ b.charCodeAt(i);\n  }\n  return result === 0;\n}\n", "/**\n * Token storage primitives for OAuth grant and access tokens.\n *\n * @remarks\n * Defines the {@link TokenStore} interface and a default in-memory\n * implementation. Persistent backends (e.g., browser storage, secure\n * keychains) are intentionally not provided here \u2014 consumers can implement\n * the interface for their environment.\n *\n * @category Auth\n * @module auth/token-store\n */\n\n/**\n * A persisted token record.\n */\nexport interface TokenRecord {\n  /** The opaque token value. */\n  token: string;\n  /** Optional expiration as a Unix timestamp in seconds. */\n  expiresAt?: number;\n}\n\n/**\n * Async key/value store for token records.\n */\nexport interface TokenStore {\n  /**\n   * Returns the record for `key`, or `null` if missing or expired.\n   */\n  get(key: string): Promise<TokenRecord | null>;\n  /**\n   * Stores `record` under `key`, overwriting any existing entry.\n   */\n  set(key: string, record: TokenRecord): Promise<void>;\n  /**\n   * Removes the entry for `key`. No-op if `key` is absent.\n   */\n  delete(key: string): Promise<void>;\n  /**\n   * Removes all entries.\n   */\n  clear(): Promise<void>;\n}\n\n/**\n * In-memory {@link TokenStore} implementation.\n *\n * @remarks\n * Expired entries are evicted lazily on read. Records are shallow-copied on\n * `set` and `get` so caller mutations do not leak into stored state.\n */\nexport class InMemoryTokenStore implements TokenStore {\n  readonly #records = new Map<string, TokenRecord>();\n\n  public get(key: string): Promise<TokenRecord | null> {\n    const record = this.#records.get(key);\n    if (record === undefined) return Promise.resolve(null);\n    if (\n      record.expiresAt !== undefined &&\n      record.expiresAt <= Math.floor(Date.now() / 1000)\n    ) {\n      this.#records.delete(key);\n      return Promise.resolve(null);\n    }\n    return Promise.resolve({ ...record });\n  }\n\n  public set(key: string, record: TokenRecord): Promise<void> {\n    this.#records.set(key, { ...record });\n    return Promise.resolve();\n  }\n\n  public delete(key: string): Promise<void> {\n    this.#records.delete(key);\n    return Promise.resolve();\n  }\n\n  public clear(): Promise<void> {\n    this.#records.clear();\n    return Promise.resolve();\n  }\n\n  /**\n   * Returns the number of stored entries (including any not yet\n   * lazily evicted). Intended for tests and diagnostics.\n   */\n  public get size(): number {\n    return this.#records.size;\n  }\n}\n", "/**\n * OAuth 2.0 Authorization Code + PKCE client orchestration.\n *\n * @remarks\n * Drives the full authorize \u2192 callback \u2192 token-exchange \u2192 refresh dance on top\n * of the {@link TokenStore} and PKCE primitives that ship with this package.\n * Implements RFC 6749 \u00A74.1 with the RFC 7636 PKCE extension (S256 only).\n *\n * @category Auth\n * @module auth/oauth-client\n */\n\nimport { computePkceChallenge, generatePkceVerifier } from \"./pkce\";\nimport {\n  InMemoryTokenStore,\n  type TokenRecord,\n  type TokenStore,\n} from \"./token-store\";\n\n/**\n * Constructor options for {@link OAuthClient}.\n */\nexport interface OAuthClientConfig {\n  /** Authorization endpoint, e.g. `https://account.vana.org/oauth/authorize`. */\n  authorizationEndpoint: string;\n  /** Token endpoint, e.g. `https://account.vana.org/oauth/token`. */\n  tokenEndpoint: string;\n  /** OAuth `client_id` (public; PKCE protects the flow). */\n  clientId: string;\n  /** Redirect URI registered with the authorization server. */\n  redirectUri: string;\n  /** Default scope; can be overridden per call. */\n  scope?: string;\n  /**\n   * Where to persist access + refresh tokens and the in-flight code verifier\n   * between `authorize` \u2192 `callback`. Defaults to a fresh\n   * {@link InMemoryTokenStore}. Use IndexedDB/localStorage-backed\n   * implementations for browser apps where the user navigates away during the\n   * dance.\n   */\n  tokenStore?: TokenStore;\n  /** Override the global `fetch` (e.g. for tests). Defaults to `globalThis.fetch`. */\n  fetchImpl?: typeof fetch;\n  /**\n   * Override the random-state generator (mostly for tests). Must return a\n   * URL-safe string of >= 16 bytes of entropy.\n   */\n  generateState?: () => string;\n}\n\n/**\n * Result of {@link OAuthClient.buildAuthorizationUrl}.\n */\nexport interface AuthorizationUrlResult {\n  /** The full authorize URL to redirect / `window.open` to. */\n  url: string;\n  /** The `state` value the auth server will echo back; used for CSRF check. */\n  state: string;\n}\n\n/** TTL for the in-flight verifier record (seconds). */\nconst VERIFIER_TTL_SECONDS = 600;\n\n/** RFC 6749 spec-compliant OAuth error payload shape. */\ninterface OAuthErrorBody {\n  error?: string;\n  error_description?: string;\n  error_uri?: string;\n}\n\n/** Successful token-endpoint response shape (RFC 6749 \u00A75.1). */\ninterface TokenEndpointResponse {\n  access_token: string;\n  token_type?: string;\n  expires_in?: number;\n  refresh_token?: string;\n  scope?: string;\n}\n\n/**\n * Authorize-URL parameters the client owns. Callers may NOT supply these\n * via `extraParams` \u2014 otherwise PKCE/CSRF protection can be silently\n * bypassed (e.g. `extraParams: { state: \"x\" }` would store the verifier\n * under the generated state but send `x` on the wire, breaking the\n * callback CSRF check; `code_challenge_method` could downgrade S256).\n */\nconst RESERVED_AUTHORIZE_PARAMS = new Set([\n  \"response_type\",\n  \"client_id\",\n  \"redirect_uri\",\n  \"scope\",\n  \"state\",\n  \"code_challenge\",\n  \"code_challenge_method\",\n]);\n\n/**\n * OAuth 2.0 Authorization Code + PKCE client.\n *\n * @remarks\n * Storage layout under the supplied {@link TokenStore} (all keys namespaced):\n * - `oauth:tokens:{clientId}`  \u2192 access token record\n * - `oauth:refresh:{clientId}` \u2192 refresh token record (no expiry)\n * - `oauth:verifier:{state}`   \u2192 in-flight PKCE verifier (10 min TTL)\n *\n * @category Auth\n */\nexport class OAuthClient {\n  readonly #config: Required<\n    Omit<\n      OAuthClientConfig,\n      \"scope\" | \"tokenStore\" | \"fetchImpl\" | \"generateState\"\n    >\n  > & {\n    scope?: string;\n    tokenStore: TokenStore;\n    fetchImpl: typeof fetch;\n    generateState: () => string;\n  };\n\n  public constructor(config: OAuthClientConfig) {\n    const fetchImpl = config.fetchImpl ?? globalThis.fetch;\n    if (typeof fetchImpl !== \"function\") {\n      throw new TypeError(\n        \"OAuthClient requires a global `fetch` or an explicit `fetchImpl`\",\n      );\n    }\n\n    this.#config = {\n      authorizationEndpoint: config.authorizationEndpoint,\n      tokenEndpoint: config.tokenEndpoint,\n      clientId: config.clientId,\n      redirectUri: config.redirectUri,\n      scope: config.scope,\n      tokenStore: config.tokenStore ?? new InMemoryTokenStore(),\n      fetchImpl,\n      generateState: config.generateState ?? defaultGenerateState,\n    };\n  }\n\n  /** Build the authorize URL and persist the PKCE verifier keyed by `state`. */\n  public async buildAuthorizationUrl(\n    opts: {\n      state?: string;\n      scope?: string;\n      extraParams?: Record<string, string>;\n    } = {},\n  ): Promise<AuthorizationUrlResult> {\n    const state = opts.state ?? this.#config.generateState();\n    const scope = opts.scope ?? this.#config.scope;\n\n    const verifier = generatePkceVerifier();\n    const challenge = await computePkceChallenge(verifier);\n\n    await this.#config.tokenStore.set(this.#verifierKey(state), {\n      token: verifier,\n      expiresAt: Math.floor(Date.now() / 1000) + VERIFIER_TTL_SECONDS,\n    });\n\n    const params = new URLSearchParams();\n    params.set(\"response_type\", \"code\");\n    params.set(\"client_id\", this.#config.clientId);\n    params.set(\"redirect_uri\", this.#config.redirectUri);\n    if (scope !== undefined && scope.length > 0) {\n      params.set(\"scope\", scope);\n    }\n    params.set(\"state\", state);\n    params.set(\"code_challenge\", challenge);\n    params.set(\"code_challenge_method\", \"S256\");\n    if (opts.extraParams !== undefined) {\n      for (const k of Object.keys(opts.extraParams)) {\n        if (RESERVED_AUTHORIZE_PARAMS.has(k)) {\n          throw new Error(\n            `extraParams may not override the reserved OAuth/PKCE parameter \"${k}\"`,\n          );\n        }\n      }\n      for (const [k, v] of Object.entries(opts.extraParams)) {\n        params.set(k, v);\n      }\n    }\n\n    const sep = this.#config.authorizationEndpoint.includes(\"?\") ? \"&\" : \"?\";\n    const url = `${this.#config.authorizationEndpoint}${sep}${params.toString()}`;\n\n    return { url, state };\n  }\n\n  /**\n   * Handle the redirect-callback URL. Validates `state`, retrieves the saved\n   * verifier, exchanges the authorization code + verifier for tokens, and\n   * persists them. Returns the access {@link TokenRecord}.\n   */\n  public async handleCallback(callbackUrl: string): Promise<TokenRecord> {\n    const parsed = new URL(callbackUrl);\n    const params = parsed.searchParams;\n\n    const errorCode = params.get(\"error\");\n    if (errorCode !== null) {\n      throw new Error(\n        formatOAuthError({\n          error: errorCode,\n          error_description: params.get(\"error_description\") ?? undefined,\n        }),\n      );\n    }\n\n    const code = params.get(\"code\");\n    const state = params.get(\"state\");\n    if (code === null || state === null) {\n      throw new Error(\"OAuth callback is missing `code` or `state`\");\n    }\n\n    const verifierRecord = await this.#config.tokenStore.get(\n      this.#verifierKey(state),\n    );\n    if (verifierRecord === null) {\n      throw new Error(\n        \"OAuth callback state does not match any in-flight verifier (possible CSRF or expired flow)\",\n      );\n    }\n\n    const body = new URLSearchParams();\n    body.set(\"grant_type\", \"authorization_code\");\n    body.set(\"code\", code);\n    body.set(\"redirect_uri\", this.#config.redirectUri);\n    body.set(\"client_id\", this.#config.clientId);\n    body.set(\"code_verifier\", verifierRecord.token);\n\n    let tokens: TokenEndpointResponse;\n    try {\n      tokens = await this.#tokenRequest(body);\n    } finally {\n      // Always clear the one-shot verifier, even on a failed exchange.\n      await this.#config.tokenStore.delete(this.#verifierKey(state));\n    }\n\n    return this.#persistTokens(tokens);\n  }\n\n  /**\n   * Exchange a stored refresh token for a fresh access token. Throws if no\n   * refresh token is available.\n   */\n  public async refresh(): Promise<TokenRecord> {\n    const refreshRecord = await this.#config.tokenStore.get(this.#refreshKey());\n    if (refreshRecord === null) {\n      throw new Error(\"OAuth refresh failed: no refresh token stored\");\n    }\n\n    const body = new URLSearchParams();\n    body.set(\"grant_type\", \"refresh_token\");\n    body.set(\"refresh_token\", refreshRecord.token);\n    body.set(\"client_id\", this.#config.clientId);\n\n    const tokens = await this.#tokenRequest(body);\n    return this.#persistTokens(tokens, refreshRecord.token);\n  }\n\n  /**\n   * Get the current access token if valid (refreshing first if expired and a\n   * refresh token is available). Returns `null` when no usable token exists.\n   */\n  public async getAccessToken(): Promise<string | null> {\n    const stored = await this.#config.tokenStore.get(this.#accessKey());\n    if (stored !== null) return stored.token;\n\n    // Stored access token is missing or already evicted by the store's TTL.\n    const refresh = await this.#config.tokenStore.get(this.#refreshKey());\n    if (refresh === null) return null;\n\n    try {\n      const refreshed = await this.refresh();\n      return refreshed.token;\n    } catch {\n      return null;\n    }\n  }\n\n  /** Forget tokens (logout). Does NOT call any remote revocation endpoint. */\n  public async signOut(): Promise<void> {\n    await this.#config.tokenStore.delete(this.#accessKey());\n    await this.#config.tokenStore.delete(this.#refreshKey());\n  }\n\n  #accessKey(): string {\n    return `oauth:tokens:${this.#config.clientId}`;\n  }\n\n  #refreshKey(): string {\n    return `oauth:refresh:${this.#config.clientId}`;\n  }\n\n  #verifierKey(state: string): string {\n    return `oauth:verifier:${state}`;\n  }\n\n  async #tokenRequest(body: URLSearchParams): Promise<TokenEndpointResponse> {\n    const response = await this.#config.fetchImpl(this.#config.tokenEndpoint, {\n      method: \"POST\",\n      headers: {\n        \"Content-Type\": \"application/x-www-form-urlencoded\",\n        Accept: \"application/json\",\n      },\n      body: body.toString(),\n    });\n\n    const text = await response.text();\n    const parsed = parseJsonBody(text);\n\n    if (!response.ok) {\n      throw new Error(formatOAuthError(parsed ?? {}, response.status));\n    }\n\n    if (\n      parsed === null ||\n      typeof parsed !== \"object\" ||\n      typeof (parsed as { access_token?: unknown }).access_token !== \"string\"\n    ) {\n      throw new Error(\n        \"OAuth token endpoint returned a response without an `access_token` string\",\n      );\n    }\n\n    return parsed as TokenEndpointResponse;\n  }\n\n  async #persistTokens(\n    tokens: TokenEndpointResponse,\n    previousRefreshToken?: string,\n  ): Promise<TokenRecord> {\n    const record: TokenRecord = { token: tokens.access_token };\n    if (typeof tokens.expires_in === \"number\" && tokens.expires_in > 0) {\n      record.expiresAt = Math.floor(Date.now() / 1000) + tokens.expires_in;\n    }\n    await this.#config.tokenStore.set(this.#accessKey(), record);\n\n    const newRefresh = tokens.refresh_token ?? previousRefreshToken;\n    if (newRefresh !== undefined) {\n      await this.#config.tokenStore.set(this.#refreshKey(), {\n        token: newRefresh,\n      });\n    }\n\n    return record;\n  }\n}\n\nfunction defaultGenerateState(): string {\n  const bytes = new Uint8Array(24);\n  crypto.getRandomValues(bytes);\n  let binary = \"\";\n  for (let i = 0; i < bytes.length; i++) {\n    binary += String.fromCharCode(bytes[i] as number);\n  }\n  return btoa(binary)\n    .replace(/\\+/g, \"-\")\n    .replace(/\\//g, \"_\")\n    .replace(/=+$/, \"\");\n}\n\nfunction parseJsonBody(text: string): unknown {\n  if (text.length === 0) return null;\n  try {\n    return JSON.parse(text) as unknown;\n  } catch {\n    return null;\n  }\n}\n\nfunction formatOAuthError(body: OAuthErrorBody, status?: number): string {\n  const parts: string[] = [\"OAuth token request failed\"];\n  if (status !== undefined) parts.push(`(HTTP ${String(status)})`);\n  if (body.error !== undefined && body.error.length > 0) {\n    parts.push(`: ${body.error}`);\n    if (\n      body.error_description !== undefined &&\n      body.error_description.length > 0\n    ) {\n      parts.push(`- ${body.error_description}`);\n    }\n  }\n  return parts.join(\" \").replace(\" : \", \": \").replace(\" - \", \" - \");\n}\n", "/**\n * EIP-712 domain and type builders for Data Portability protocol writes.\n *\n * These helpers are shared primitives only. Personal Server runtimes own when\n * to sign and submit these payloads.\n *\n * @category Protocol\n */\n\nimport type { TypedDataDomain } from \"viem\";\n\nconst DOMAIN_NAME = \"Vana Data Portability\";\nconst DOMAIN_VERSION = \"1\";\n\nexport interface DataPortabilityContracts {\n  dataRegistry: string;\n  dataPortabilityPermissions: string;\n  dataPortabilityServer: string;\n  dataPortabilityGrantees: string;\n  // DataPortabilityEscrow \u2014 verifies GENERIC_PAYMENT_TYPES signatures backing\n  // /v1/escrow/pay (the data-access payment path).\n  dataPortabilityEscrow: string;\n  // FeeRegistry \u2014 per-operation `{amount, asset, payee, enabled}` records\n  // keyed on `keccak256(name)`. The gateway re-resolves fees against this\n  // contract on every /v1/escrow/pay so the SDK has to read the same\n  // source of truth to size payment amounts.\n  feeRegistry: string;\n}\n\n// Native VANA asset sentinel used by /v1/escrow/pay's `asset` field \u2014 pay any\n// other ERC-20 by passing its contract address instead.\nexport const NATIVE_VANA_ASSET =\n  \"0x0000000000000000000000000000000000000000\" as const;\n\nexport interface DataPortabilityGatewayConfig {\n  chainId: number;\n  contracts: DataPortabilityContracts;\n}\n\nfunction buildDomain(\n  chainId: number,\n  verifyingContract: `0x${string}`,\n): TypedDataDomain {\n  return {\n    name: DOMAIN_NAME,\n    version: DOMAIN_VERSION,\n    chainId,\n    verifyingContract,\n  };\n}\n\n// Domain for the DataRegistryV2 contract \u2014 verifies the AddData and\n// RecordDataAccess EIP-712 signatures. The v2 contract dropped the file\n// concept entirely in favor of versioned data points keyed on (owner,\n// scope); the primaryType distinguishes the two flows.\nexport function dataRegistryDomain(\n  config: DataPortabilityGatewayConfig,\n): TypedDataDomain {\n  return buildDomain(\n    config.chainId,\n    config.contracts.dataRegistry as `0x${string}`,\n  );\n}\n\nexport function grantRegistrationDomain(\n  config: DataPortabilityGatewayConfig,\n): TypedDataDomain {\n  return buildDomain(\n    config.chainId,\n    config.contracts.dataPortabilityPermissions as `0x${string}`,\n  );\n}\n\nexport function grantRevocationDomain(\n  config: DataPortabilityGatewayConfig,\n): TypedDataDomain {\n  return buildDomain(\n    config.chainId,\n    config.contracts.dataPortabilityPermissions as `0x${string}`,\n  );\n}\n\nexport function serverRegistrationDomain(\n  config: DataPortabilityGatewayConfig,\n): TypedDataDomain {\n  return buildDomain(\n    config.chainId,\n    config.contracts.dataPortabilityServer as `0x${string}`,\n  );\n}\n\nexport function builderRegistrationDomain(\n  config: DataPortabilityGatewayConfig,\n): TypedDataDomain {\n  return buildDomain(\n    config.chainId,\n    config.contracts.dataPortabilityGrantees as `0x${string}`,\n  );\n}\n\n// Domain for the generic-payment EIP-712 signature consumed by\n// /v1/escrow/pay. The verifyingContract is the escrow itself (not the per-op\n// contract), so a single signature debits the payer's escrow balance for any\n// supported op \u2014 `grant` today; file/builder/schema in the future.\nexport function escrowPaymentDomain(\n  config: DataPortabilityGatewayConfig,\n): TypedDataDomain {\n  return buildDomain(\n    config.chainId,\n    config.contracts.dataPortabilityEscrow as `0x${string}`,\n  );\n}\n\n/**\n * Domain for a gateway-authorized escrow withdrawal.\n *\n * Withdrawals use the escrow contract as their verifying contract, just like\n * generic payments. The distinct primary type prevents a payment signature\n * from authorizing a withdrawal.\n */\nexport function withdrawAuthorizationDomain(\n  config: DataPortabilityGatewayConfig,\n): TypedDataDomain {\n  return escrowPaymentDomain(config);\n}\n\n// grantVersion is a monotonic uint256 nonce per (grantor, grantee) pair. The\n// gateway rejects any registration whose version is <= the stored value,\n// which is the replay-attack defence now that re-registering the same pair\n// is a permitted override. expiresAt is unix seconds; 0 = no expiry.\nexport const GRANT_REGISTRATION_TYPES = {\n  GrantRegistration: [\n    { name: \"grantorAddress\", type: \"address\" },\n    { name: \"granteeId\", type: \"bytes32\" },\n    { name: \"scopes\", type: \"string[]\" },\n    { name: \"grantVersion\", type: \"uint256\" },\n    { name: \"expiresAt\", type: \"uint256\" },\n  ],\n} as const;\n\n// Revocation shares the (grantor, grantee) monotonic nonce with registration \u2014\n// both events advance the same grantVersion counter so an old revocation sig\n// can't be replayed across a revoke \u2192 re-register cycle.\nexport const GRANT_REVOCATION_TYPES = {\n  GrantRevocation: [\n    { name: \"grantorAddress\", type: \"address\" },\n    { name: \"grantId\", type: \"bytes32\" },\n    { name: \"grantVersion\", type: \"uint256\" },\n  ],\n} as const;\n\nexport const SERVER_REGISTRATION_TYPES = {\n  ServerRegistration: [\n    { name: \"ownerAddress\", type: \"address\" },\n    { name: \"serverAddress\", type: \"address\" },\n    { name: \"publicKey\", type: \"string\" },\n    { name: \"serverUrl\", type: \"string\" },\n  ],\n} as const;\n\nexport const BUILDER_REGISTRATION_TYPES = {\n  BuilderRegistration: [\n    { name: \"ownerAddress\", type: \"address\" },\n    { name: \"granteeAddress\", type: \"address\" },\n    { name: \"publicKey\", type: \"string\" },\n    { name: \"appUrl\", type: \"string\" },\n  ],\n} as const;\n\n// Generic payment for the escrow flow. The (opType, opId) pair routes the\n// debit to the right op-row; paymentNonce is per-payer monotonic so the same\n// signed message can't be replayed after a revoke + re-register cycle.\n//\n// Legacy grant payments bind opId to grantId; standalone data_access payments\n// bind opId to the accompanying accessRecord.recordId.\nexport const GENERIC_PAYMENT_TYPES = {\n  GenericPayment: [\n    { name: \"payerAddress\", type: \"address\" },\n    { name: \"opType\", type: \"string\" },\n    { name: \"opId\", type: \"bytes32\" },\n    { name: \"asset\", type: \"address\" },\n    { name: \"amount\", type: \"uint256\" },\n    { name: \"paymentNonce\", type: \"uint256\" },\n  ],\n} as const;\n\n/**\n * Authorization consumed by `POST /v1/escrow/withdraw`.\n *\n * The current escrow contract always pays `account` itself. Do not add an\n * unsigned recipient field: a future recipient capability must be introduced\n * as a new, signed protocol type after the contract and gateway support it.\n */\nexport const WITHDRAW_AUTHORIZATION_TYPES = {\n  WithdrawAuthorization: [\n    { name: \"account\", type: \"address\" },\n    { name: \"asset\", type: \"address\" },\n    { name: \"amount\", type: \"uint256\" },\n    { name: \"withdrawNonce\", type: \"uint256\" },\n    { name: \"deadline\", type: \"uint256\" },\n  ],\n} as const;\n\n// AddData is signed by the data point's owner \u2014 registers (scope, dataHash,\n// metadataHash) on DataRegistryV2. expectedVersion is the version the caller\n// believes is current; the contract rejects with a CAS error if it isn't.\n// Used at POST /v1/data.\nexport const ADD_DATA_TYPES = {\n  AddData: [\n    { name: \"ownerAddress\", type: \"address\" },\n    { name: \"scope\", type: \"string\" },\n    { name: \"dataHash\", type: \"bytes32\" },\n    { name: \"metadataHash\", type: \"bytes32\" },\n    { name: \"expectedVersion\", type: \"uint256\" },\n  ],\n} as const;\n\n// RecordDataAccess is signed by a *trusted personal server* of `ownerAddress`\n// \u2014 attests that (scope, version) was served to `accessor`. recordId is a\n// per-event bytes32 the contract pins in `_usedRecordIds` to prevent replay.\n// Used as the optional `accessRecord` on POST /v1/escrow/pay.\nexport const RECORD_DATA_ACCESS_TYPES = {\n  RecordDataAccess: [\n    { name: \"ownerAddress\", type: \"address\" },\n    { name: \"scope\", type: \"string\" },\n    { name: \"version\", type: \"uint256\" },\n    { name: \"accessor\", type: \"address\" },\n    { name: \"recordId\", type: \"bytes32\" },\n  ],\n} as const;\n\nexport interface GrantRegistrationMessage {\n  grantorAddress: `0x${string}`;\n  granteeId: `0x${string}`;\n  scopes: string[];\n  grantVersion: bigint;\n  expiresAt: bigint;\n}\n\nexport interface GrantRevocationMessage {\n  grantorAddress: `0x${string}`;\n  grantId: `0x${string}`;\n  grantVersion: bigint;\n}\n\nexport interface ServerRegistrationMessage {\n  ownerAddress: `0x${string}`;\n  serverAddress: `0x${string}`;\n  publicKey: string;\n  serverUrl: string;\n}\n\nexport interface BuilderRegistrationMessage {\n  ownerAddress: `0x${string}`;\n  granteeAddress: `0x${string}`;\n  publicKey: string;\n  appUrl: string;\n}\n\nexport interface GenericPaymentMessage {\n  payerAddress: `0x${string}`;\n  // 'grant' today \u2014 extensible to 'file' | 'builder' | 'schema' as those\n  // op-types become payable. Sent verbatim over the wire and into the\n  // typed-data string field, so callers must match the gateway's spelling.\n  opType: string;\n  opId: `0x${string}`;\n  // NATIVE_VANA_ASSET for native VANA; an ERC-20 contract address otherwise.\n  asset: `0x${string}`;\n  amount: bigint;\n  paymentNonce: bigint;\n}\n\n/** EIP-712 message authorizing a withdrawal of an account's escrow balance. */\nexport interface WithdrawAuthorizationMessage {\n  /** The escrow account to debit and the withdrawal recipient. */\n  account: `0x${string}`;\n  /** Native VANA sentinel or the ERC-20 asset contract. */\n  asset: `0x${string}`;\n  /** Base-unit amount. */\n  amount: bigint;\n  /** Caller-managed, strictly increasing nonce for newly accepted intents. */\n  withdrawNonce: bigint;\n  /** Unix seconds. Bounds first acceptance; exact accepted retries remain valid. */\n  deadline: bigint;\n}\n\n/** Builds the typed data a wallet must sign before calling the withdraw API. */\nexport function buildWithdrawAuthorizationTypedData(\n  config: DataPortabilityGatewayConfig,\n  message: WithdrawAuthorizationMessage,\n) {\n  return {\n    domain: withdrawAuthorizationDomain(config),\n    types: WITHDRAW_AUTHORIZATION_TYPES,\n    primaryType: \"WithdrawAuthorization\" as const,\n    message,\n  };\n}\n\nexport interface AddDataMessage {\n  ownerAddress: `0x${string}`;\n  scope: string;\n  dataHash: `0x${string}`;\n  metadataHash: `0x${string}`;\n  expectedVersion: bigint;\n}\n\nexport interface RecordDataAccessMessage {\n  ownerAddress: `0x${string}`;\n  scope: string;\n  version: bigint;\n  accessor: `0x${string}`;\n  recordId: `0x${string}`;\n}\n", "/**\n * Enclave identity and consent primitives for Personal Servers.\n *\n * Owner/Web -> Gateway -> Agent(CVM): derive wallet and quote\n * Web verifies evidence; Account authenticates and encrypts the EIP-191 master\n * signature to the enclave key; Gateway relays it blind; Agent decrypts/seals.\n *\n * @category Protocol\n */\n\nimport * as secp256k1 from \"@noble/secp256k1\";\nimport {\n  concat,\n  encodePacked,\n  fromHex,\n  getAddress,\n  isAddressEqual,\n  keccak256,\n  recoverPublicKey,\n  toBytes,\n  toHex,\n  type Address,\n  type Hex,\n} from \"viem\";\nimport { publicKeyToAddress } from \"viem/accounts\";\nimport { serializeECIES, type ECIESProvider } from \"../crypto/ecies/interface\";\nimport { deriveMasterKey, recoverServerOwner } from \"../crypto/keys/derive\";\nimport type { ServerRegistrationMessage } from \"./eip712\";\n\nexport const ENCLAVE_IDENTITY_EVIDENCE_VERSION = 1;\nexport const USER_PS_ID_DOMAIN = \"vana.ps-enclave.v1\";\nexport const ENCLAVE_WALLET_PURPOSE = \"vana.ps-enclave.wallet.v1\";\nexport const MASTER_SIGNATURE_DELIVERY_VERSION = \"vana.ps-enclave.delivery.v1\";\n/** Agent rejects deliveries when `|now - issuedAt|` exceeds this value. */\nexport const MASTER_SIGNATURE_DELIVERY_MAX_AGE_SECONDS = 600;\nexport const SEALED_ENVELOPE_VERSION = 1;\n\nconst VANA_MAINNET_CHAIN_ID = 1480;\nconst MOKSHA_CHAIN_ID = 14800;\nconst KMS_ISSUED_PREFIX = \"dstack-kms-issued\";\nconst PREIMAGE_SEPARATOR = \":\";\nconst UNCOMPRESSED_PUBLIC_KEY_BYTES = 65;\nconst UNCOMPRESSED_PUBLIC_KEY_PREFIX = \"04\";\nconst EMPTY_HEX = \"0x\";\n\n/** `keccak256(encodePacked([string,uint256,address], [USER_PS_ID_DOMAIN,chainId,owner]))`. */\nexport type UserPsId = Hex;\n\n/** Attested identity evidence returned by the enclave agent. */\nexport interface EnclaveIdentityEvidence {\n  v: typeof ENCLAVE_IDENTITY_EVIDENCE_VERSION;\n  userPsId: UserPsId;\n  chainId: number;\n  ownerAddress: Address;\n  /** Path suffix `users/{id}/wallet/ethereum/secp256k1/v{epoch}`. */\n  epoch: number;\n  address: Address;\n  /** 65-byte uncompressed `0x04..`; `publicKeyToAddress(publicKey) == address`. */\n  publicKey: Hex;\n  /** 20-byte dstack `app_id`. */\n  appId: Hex;\n  /** 32-byte compose hash. */\n  composeHash: Hex;\n  /** Omitted when the OS does not expose its image hash. */\n  osImageHash?: Hex;\n  /** Must equal `ENCLAVE_WALLET_PURPOSE`. */\n  purpose: string;\n  /** `[appRoot over link 0, kmsRoot over link 1]`; see `appRootPreimage` and `kmsIssuedPreimage`. */\n  signatureChain: [Hex, Hex];\n  /** Raw TDX quote with report_data `keccak256(userPsId || address)`; not parsed. */\n  quote: Hex;\n  eventLog?: string;\n  /** `keccak256` of the uncompressed KMS root public key. */\n  kmsRootFingerprint: Hex;\n}\n\n/** Identity values the caller expects the evidence to bind. */\nexport interface ExpectedIdentity {\n  ownerAddress: Address;\n  chainId: number;\n  epoch: number;\n}\n\n/** Request for an owner-scoped enclave identity. */\nexport interface IdentityRequest {\n  ownerAddress: Address;\n  chainId: number;\n}\n\n/** Lifecycle state of an enclave identity. */\nexport type IdentityState = \"prepared\" | \"registered\" | \"sealed\" | \"retired\";\n\n/** Gateway response containing enclave identity state and registration data. */\nexport interface IdentityResponse {\n  identity: EnclaveIdentityEvidence;\n  state: IdentityState;\n  created: boolean;\n  /** Exact `ServerRegistration.serverUrl` the owner signs. */\n  serverUrl: string;\n  serverId?: Hex;\n  serverStatus?:\n    | \"pending\"\n    | \"submitting\"\n    | \"confirmed\"\n    | \"finalized\"\n    | \"failed\";\n  sealed: boolean;\n}\n\n/** Versioned server-registration request for an enclave identity. */\nexport type IdentityRegistrationRequest =\n  | { version: \"v2\"; message: ServerRegistrationMessage }\n  | {\n      version: \"v3\";\n      message: ServerRegistrationMessage & { nonce: string; deadline: string };\n    };\n\n/** Accepted identity-registration response. */\nexport interface IdentityRegistrationResponse {\n  serverId: Hex;\n  state: \"registered\";\n  serverStatus: \"pending\";\n}\n\n/** Inner plaintext of the ECIES box. */\nexport interface MasterSignatureDelivery {\n  v: typeof MASTER_SIGNATURE_DELIVERY_VERSION;\n  userPsId: UserPsId;\n  epoch: number;\n  enclaveAddress: Address;\n  ownerAddress: Address;\n  /** 65-byte EIP-191 signature over `MASTER_KEY_MESSAGE`. */\n  masterSignature: Hex;\n  /** Unix seconds; see `MASTER_SIGNATURE_DELIVERY_MAX_AGE_SECONDS`. */\n  issuedAt: number;\n}\n\n/** Enclave-bound ciphertext submitted for sealing. */\nexport interface SealedSecretSubmission {\n  userPsId: UserPsId;\n  epoch: number;\n  enclaveAddress: Address;\n  /** `iv(16) || ephemPub(65) || ct || mac(32)` to `evidence.publicKey`. */\n  ciphertext: Hex;\n}\n\n/** Confirmation that the enclave sealed a submitted secret. */\nexport interface SealedSecretResponse {\n  sealed: true;\n  /** `sha256(ciphertext)`. */\n  secretHash: Hex;\n  sealedAt: string;\n}\n\n/** AES-GCM fields encoded as base64 strings. */\nexport interface AesGcmBox {\n  /** Base64 initialization vector. */\n  iv: string;\n  /** Base64 ciphertext. */\n  ciphertext: string;\n  /** Base64 authentication tag. */\n  tag: string;\n}\n\n/** Persisted enclave envelope; the Gateway treats it as opaque text. */\nexport interface SealedEnvelope extends AesGcmBox {\n  v: typeof SEALED_ENVELOPE_VERSION;\n  wrappedContentKey: AesGcmBox;\n}\n\n/** Fleet-pinned KMS root and allowed dstack application IDs. */\nexport interface EnclaveTrustAnchors {\n  kmsRootPubkey: Hex;\n  appIds: readonly Hex[];\n}\n\n/**\n * Mainnet fleet anchors, harvested from the prod9 fleet on 2026-09-15.\n *\n * `kmsRootPubkey` is byte-identical to Moksha's: both fleets run under the same\n * Phala KMS, so the key-provider root does NOT separate them. `appIds` is what\n * does \u2014 it lists the mainnet worker app only, and must never contain a Moksha\n * app id. The controller is absent by design: it derives no owner keys.\n */\nconst MAINNET_ANCHOR: Readonly<EnclaveTrustAnchors> = Object.freeze({\n  kmsRootPubkey:\n    \"0x0434c76e0c3f52ec64cbf9bbf5c910c272330166fd656c0a86bb330963e46910e1a0e6fa51bec74be2f9129342707636060d85856d102cee8290185409ecf7422f\",\n  appIds: Object.freeze([\n    \"0x01bb1b6dcaf1ea170f1480c5e53b093f384d939a\",\n  ] as Hex[]),\n});\n\n/** Fleet-provisioned trust anchors keyed by Vana chain ID. */\nexport const ENCLAVE_TRUST_ANCHORS: Readonly<\n  Record<number, Readonly<EnclaveTrustAnchors>>\n> = Object.freeze({\n  [VANA_MAINNET_CHAIN_ID]: MAINNET_ANCHOR,\n  // Moksha workers share this dstack app and KMS root; the controller does not derive owner keys.\n  [MOKSHA_CHAIN_ID]: Object.freeze({\n    kmsRootPubkey:\n      \"0x0434c76e0c3f52ec64cbf9bbf5c910c272330166fd656c0a86bb330963e46910e1a0e6fa51bec74be2f9129342707636060d85856d102cee8290185409ecf7422f\",\n    appIds: Object.freeze([\n      \"0xec9a39de98c760e1ded9f1e97016dc5f0e357cf2\" as Hex,\n    ]),\n  }),\n});\n\n/**\n * Derives the deterministic Personal Server ID used by enclave paths.\n *\n * @param chainId - Vana chain ID.\n * @param ownerAddress - Checksummed owner address.\n * @returns The path-compatible keccak256 digest.\n */\nexport function userPsId(chainId: number, ownerAddress: Address): UserPsId {\n  const packed = encodePacked(\n    [\"string\", \"uint256\", \"address\"],\n    [USER_PS_ID_DOMAIN, BigInt(chainId), getAddress(ownerAddress)],\n  );\n\n  return keccak256(packed);\n}\n\nfunction compressPublicKey(publicKey: Hex): Uint8Array {\n  return secp256k1.ProjectivePoint.fromHex(\n    fromHex(publicKey, \"bytes\"),\n  ).toRawBytes(true);\n}\n\nfunction sameKey(a: Hex, b: Hex): boolean {\n  return toHex(compressPublicKey(a)) === toHex(compressPublicKey(b));\n}\n\nfunction assertUncompressedKey(publicKey: Hex): void {\n  const hex = publicKey.slice(2);\n  if (\n    hex.length !== UNCOMPRESSED_PUBLIC_KEY_BYTES * 2 ||\n    !hex.startsWith(UNCOMPRESSED_PUBLIC_KEY_PREFIX) ||\n    !/^[0-9a-fA-F]+$/.test(hex)\n  ) {\n    throw new Error(\"Public key must be a 65-byte uncompressed secp256k1 key\");\n  }\n}\n\n/**\n * Builds keccak256(utf8(purpose || \":\" || lowercase hex(compressed pubkey))).\n *\n * Matches `dstack/guest-agent/src/rpc_service.rs:612-628`.\n */\nexport function appRootPreimage(purpose: string, publicKey: Hex): Hex {\n  const keyHex = toHex(compressPublicKey(publicKey)).slice(2);\n  return keccak256(toBytes(`${purpose}${PREIMAGE_SEPARATOR}${keyHex}`));\n}\n\n/**\n * Hashes the KMS prefix, raw app ID bytes, and compressed app-root public key.\n *\n * Matches `dstack/kms/src/crypto.rs:23-40`; there is no separator between the\n * raw 20-byte app ID and the compressed key.\n */\nexport function kmsIssuedPreimage(appId: Hex, appRootPublicKey: Hex): Hex {\n  const prefix = concat([\n    toBytes(`${KMS_ISSUED_PREFIX}${PREIMAGE_SEPARATOR}`),\n    fromHex(appId, \"bytes\"),\n  ]);\n  const compressed = compressPublicKey(appRootPublicKey);\n\n  return keccak256(concat([prefix, compressed]));\n}\n\nasync function recoverChainKey(\n  hash: Hex,\n  signature: Hex,\n  link: number,\n): Promise<Hex> {\n  try {\n    return (await recoverPublicKey({ hash, signature })).toLowerCase() as Hex;\n  } catch {\n    throw new Error(`Invalid enclave signature chain link ${link}`);\n  }\n}\n\n/**\n * Verifies the enclave wallet binding against fleet-provisioned trust anchors.\n *\n * @param evidence - Identity evidence returned by the enclave agent.\n * @param anchors - Pinned KMS root and allowed dstack app IDs.\n * @param expected - Owner, chain, and epoch requested by the caller.\n *\n * @remarks\n * The dstack chain signs only `purpose || publicKey` and `appId || appRootPub`;\n * owner, chain and epoch are bound to the key by the TDX quote report_data\n * (`keccak256(userPsId || address)`), which v1 stores but does not verify\n * (DCAP is step 4). Until then the agent's derivation check is the backstop.\n * @throws When any identity binding or trust check fails.\n */\nexport async function verifyEnclaveIdentityEvidence(\n  evidence: EnclaveIdentityEvidence,\n  anchors: EnclaveTrustAnchors,\n  expected: ExpectedIdentity,\n): Promise<void> {\n  if (evidence.v !== ENCLAVE_IDENTITY_EVIDENCE_VERSION) {\n    throw new Error(\"Unsupported enclave identity evidence version\");\n  }\n\n  if (!Number.isInteger(evidence.epoch) || evidence.epoch < 1) {\n    throw new Error(\"Invalid enclave identity epoch\");\n  }\n\n  if (evidence.chainId !== expected.chainId) {\n    throw new Error(\n      \"Enclave identity chain ID does not match expected chain ID\",\n    );\n  }\n\n  if (!isAddressEqual(evidence.ownerAddress, expected.ownerAddress)) {\n    throw new Error(\"Enclave identity owner does not match expected owner\");\n  }\n\n  if (evidence.epoch !== expected.epoch) {\n    throw new Error(\"Enclave identity epoch does not match expected epoch\");\n  }\n\n  const expectedUserPsId = userPsId(expected.chainId, expected.ownerAddress);\n  if (evidence.userPsId.toLowerCase() !== expectedUserPsId.toLowerCase()) {\n    throw new Error(\"Enclave userPsId does not match expected identity\");\n  }\n\n  if (evidence.purpose !== ENCLAVE_WALLET_PURPOSE) {\n    throw new Error(\"Unexpected enclave wallet purpose\");\n  }\n\n  if (anchors.kmsRootPubkey === EMPTY_HEX) {\n    throw new Error(\"KMS root trust anchor is not provisioned\");\n  }\n\n  assertUncompressedKey(evidence.publicKey);\n  const derivedAddress = publicKeyToAddress(evidence.publicKey);\n\n  if (getAddress(derivedAddress) !== getAddress(evidence.address)) {\n    throw new Error(\"Enclave public key does not match its address\");\n  }\n\n  const appRootPublicKey = await recoverChainKey(\n    appRootPreimage(evidence.purpose, evidence.publicKey),\n    evidence.signatureChain[0],\n    0,\n  );\n  const kmsRootPublicKey = await recoverChainKey(\n    kmsIssuedPreimage(evidence.appId, appRootPublicKey),\n    evidence.signatureChain[1],\n    1,\n  );\n\n  let matchesAnchor: boolean;\n  try {\n    matchesAnchor = sameKey(kmsRootPublicKey, anchors.kmsRootPubkey);\n  } catch {\n    throw new Error(\"KMS root trust anchor is malformed\");\n  }\n\n  if (!matchesAnchor) {\n    throw new Error(\"KMS root public key does not match the trust anchor\");\n  }\n\n  if (\n    keccak256(kmsRootPublicKey) !== evidence.kmsRootFingerprint.toLowerCase()\n  ) {\n    throw new Error(\"KMS root fingerprint does not match the evidence\");\n  }\n\n  const appId = evidence.appId.toLowerCase();\n  if (\n    !anchors.appIds.some((allowedAppId) => allowedAppId.toLowerCase() === appId)\n  ) {\n    throw new Error(\"Enclave app ID is not trusted\");\n  }\n}\n\n/**\n * Builds the authenticated master-signature plaintext delivered to an enclave.\n *\n * @param evidence - Verified enclave identity evidence.\n * @param masterSignature - EIP-191 signature over the master-key message.\n * @param now - Issuance time in Unix seconds.\n * @returns The authenticated plaintext delivery object.\n * @throws When the signature is malformed or does not belong to the owner.\n */\nexport async function buildMasterSignatureDelivery(\n  evidence: EnclaveIdentityEvidence,\n  masterSignature: Hex,\n  now = Math.floor(Date.now() / 1000),\n): Promise<MasterSignatureDelivery> {\n  // Validate signature length and hex encoding before recovery.\n  deriveMasterKey(masterSignature);\n  const signerAddress = await recoverServerOwner(masterSignature);\n\n  if (!isAddressEqual(signerAddress, evidence.ownerAddress)) {\n    throw new Error(\"Master signature signer does not match evidence owner\");\n  }\n\n  return {\n    v: MASTER_SIGNATURE_DELIVERY_VERSION,\n    userPsId: evidence.userPsId,\n    epoch: evidence.epoch,\n    enclaveAddress: evidence.address,\n    ownerAddress: evidence.ownerAddress,\n    masterSignature,\n    issuedAt: now,\n  };\n}\n\n/**\n * Encrypts a master-signature delivery in the SDK's ECIES wire format.\n *\n * @param delivery - Plaintext delivery object.\n * @param publicKey - Enclave 65-byte uncompressed public key.\n * @param ecies - Platform-specific ECIES provider.\n * @returns The 0x-prefixed serialized ciphertext.\n * @throws When the public key is malformed or belongs to another enclave.\n */\nexport async function encryptMasterSignatureDelivery(\n  delivery: MasterSignatureDelivery,\n  publicKey: Hex,\n  ecies: ECIESProvider,\n): Promise<Hex> {\n  assertUncompressedKey(publicKey);\n\n  if (!isAddressEqual(publicKeyToAddress(publicKey), delivery.enclaveAddress)) {\n    throw new Error(\n      \"Public key does not belong to the delivery's enclave address\",\n    );\n  }\n\n  const plaintext = toBytes(JSON.stringify(delivery));\n  const encrypted = await ecies.encrypt(fromHex(publicKey, \"bytes\"), plaintext);\n\n  return `0x${serializeECIES(encrypted)}`;\n}\n", "/**\n * Job queue protocol types for encrypted Personal Server execution.\n *\n *                 Builder -> GW -> Agent -> Sandbox\n * Builder -> GW: submit an enclave-encrypted request.\n * GW -> Agent: claim work with a fenced lease and sealed owner identity.\n * Agent -> Sandbox: decrypt, wake the owner sandbox, and execute privately.\n * Sandbox -> Agent: encrypt the result to the builder's public key.\n * Agent -> GW: store the sealed result and complete with its object key, hash, and size.\n * GW -> Builder: return inline or polled status with an object-storage handle.\n * Builder: decrypt and verify the result's job, scope, and version bindings.\n * Full flow: personal-server-ts `docs/260903-jobs-contract.md`, section 1.\n *\n * @category Protocol\n */\n\nimport type { Address, Hex } from \"viem\";\nimport type { SealedEnvelope } from \"./identity\";\n\nexport const JOB_PROTOCOL_VERSION = 1;\nexport const JOB_OPERATIONS = [\"raw_read\", \"inference\"] as const;\nexport type JobOperation = (typeof JOB_OPERATIONS)[number];\nexport const JOB_STATES = [\n  \"queued\",\n  \"claimed\",\n  \"running\",\n  \"completed\",\n  \"failed\",\n  \"expired\",\n  \"cancelled\",\n] as const;\nexport type JobState = (typeof JOB_STATES)[number];\n/** Payment lifecycle recorded for a queued job. */\n/**\n * What actually happened to the money for one read.\n *\n * `none` is the pre-fee literal every job carried before job fees and stays in\n * the union for those rows. `free` is a chain whose `data_access` fee is\n * disabled or zero \u2014 priced honestly at nothing, not a placeholder. `unbilled`\n * is a read the Gateway priced but did not charge, either during the fee\n * rollout or on a path with no payer.\n */\nexport type PaymentState =\n  | \"none\"\n  | \"free\"\n  | \"unbilled\"\n  | \"reserved\"\n  | \"settling\"\n  | \"settled\"\n  | \"released\";\n\n/**\n * The builder's signed authorization for the price of one read.\n *\n * The same EIP-712 `GenericPayment` a legacy Personal Server read signs into\n * its `X-PAYMENT` header, over `opType: \"job_access\"` and\n * `opId: keccak256(jobId)`. The Gateway stores it verbatim on the payment row.\n */\nexport interface JobPaymentAuthorization {\n  signature: Hex;\n  /** uint256 decimal; must equal the Gateway's quote for this chain. */\n  amount: string;\n  asset: Address;\n  /** uint256 decimal, unique per (payer, kind). */\n  paymentNonce: string;\n}\n\n/** The price of one delivered read, as `GET /v1/jobs/quote` reports it. */\nexport interface JobQuote {\n  chainId: number;\n  /** uint256 decimal; \"0\" when this chain charges nothing. */\n  price: string;\n  asset: Address;\n  /** False when the fee is disabled or zero, so no payment is needed. */\n  payable: boolean;\n  /** Whether the Gateway refuses an unpaid submission today. */\n  enforced: boolean;\n}\n\n/** RecordDataAccess receipt fields plus the enclave signature over them. */\nexport interface JobAccessRecord {\n  dataPointId: Hex;\n  /** uint256 decimal \u2014 the data-point version actually served. */\n  version: string;\n  accessor: Address;\n  /** bytes32 per-event replay nonce; the contract pins it. */\n  recordId: Hex;\n  signature: Hex;\n}\nexport const DEFAULT_LEASE_SECONDS = 30;\nexport const MAX_LEASE_SECONDS = 300;\nexport const MAX_ATTEMPTS = 3;\nexport const MAX_WAIT_SECONDS = 25;\nexport const CLAIM_POLL_FLOOR_MS = 1000;\nexport const DEFAULT_JOB_DEADLINE_SECONDS = 600;\nexport const MAX_JOB_DEADLINE_SECONDS = 3600;\n\n/** Inner plaintext of the request box (ECIES to the enclave publicKey). */\nexport interface JobRequest {\n  v: 1;\n  jobId: string;\n  owner: Address;\n  builder: Address;\n  builderPublicKey: Hex;\n  grantId: Hex;\n  scope: string;\n  operation: JobOperation;\n  pinnedVersion: string | null;\n  deadline: string; /* ISO */\n}\n/** Plaintext of the request box; the Gateway never sees it. */\nexport interface JobRequestEnvelope {\n  request: JobRequest;\n  /**\n   * `Web3Signed <b64>.<sig>` by the builder: `aud` = Gateway origin,\n   * `uri` = `/v1/jobs/execute`,\n   * `bodyHash` = `sha256(canonicalJobRequestBytes(request))`.\n   */\n  auth: string;\n}\n/** Outer body of POST /v1/jobs (signed Web3Signed by the builder). */\nexport interface JobSubmission {\n  owner: Address;\n  grantId: Hex;\n  scope: string;\n  operation: JobOperation;\n  idempotencyKey: string;\n  /** Client UUID, echoed in `JobRequest.jobId`. */\n  jobId: string;\n  deadline?: string;\n  /** Base64 ECIES from `sealJobRequest`. */\n  requestCiphertext: string;\n  /**\n   * The most the builder accepts for this read, uint256 decimal. The Gateway\n   * refuses a quote above it rather than charging a price nobody agreed to.\n   *\n   * @remarks\n   * This submission is authenticated by a Web3Signed body hash, not by an\n   * EIP-712 struct, so these three fields are covered by the builder's existing\n   * request signature. No typed-data version changes.\n   */\n  maxPrice?: string;\n  priceAsset?: Address;\n  payment?: JobPaymentAuthorization;\n}\n/** Where a completed job's sealed result lives. Bytes never transit the Gateway. */\nexport interface ResultHandle {\n  /** Object key in vana-storage, `jobresults/{chainId}/{jobId}`. */\n  objectKey: string;\n  /** Absolute URL the builder GETs. The Gateway builds it from its storage origin. */\n  url: string;\n  /** Byte length of the sealed object. */\n  size: number;\n  /** sha256 of the sealed bytes, 0x-prefixed. */\n  hash: Hex;\n  /** Logical expiry. After this the Gateway stops serving the handle. */\n  expiresAt: string;\n}\n/** Response from `GET /v1/jobs/:id`. */\nexport interface JobStatus {\n  jobId: string;\n  state: JobState;\n  operation: JobOperation;\n  owner: Address;\n  grantId: Hex;\n  scope: string;\n  pinnedVersion: string | null;\n  attempt: number;\n  price: string;\n  /**\n   * Null exactly when the read is free; nothing owed is owed to nobody.\n   * Optional so a consumer's existing `JobStatus` fixtures keep compiling; the\n   * Gateway always sends it.\n   */\n  priceAsset?: Address | null;\n  payer: \"builder\";\n  paymentState: PaymentState;\n  createdAt: string;\n  claimedAt: string | null;\n  completedAt: string | null;\n  failureReason: string | null;\n  /** Present only when `state === \"completed\"`. */\n  result?: ResultHandle;\n}\n/** Request body for `POST /v1/jobs/claim`. */\nexport interface ClaimRequest {\n  leaseSeconds?: number;\n  capacity?: number;\n}\n/** Claimed job and owner identity returned by `POST /v1/jobs/claim`. */\nexport interface ClaimResponse {\n  job: {\n    jobId: string;\n    owner: Address;\n    builder: Address;\n    grantId: Hex;\n    scope: string;\n    operation: JobOperation;\n    pinnedVersion: string | null;\n    requestCiphertext: string;\n    attempt: number;\n    deadlineAt: string | null;\n    claimExpiresAt: string;\n    fencingToken: number; /* = attempt; every node write echoes it */\n  };\n  identity: {\n    userPsId: Hex;\n    epoch: number;\n    enclaveAddress: Address;\n    enclavePublicKey: Hex;\n    sealedEnvelope: SealedEnvelope;\n  };\n}\n/** Request body for `POST /v1/jobs/:id/heartbeat`. */\nexport interface HeartbeatRequest {\n  leaseSeconds?: number;\n  fencingToken: number;\n}\n/** Request body for `POST /v1/jobs/:id/complete`. */\nexport interface CompleteRequest {\n  fencingToken: number;\n  resultHash: Hex;\n  resultSize: number;\n  /** `jobresults/{chainId}/{jobId}`. */\n  resultObjectKey: string;\n  /**\n   * Server-signed delivery receipt for the read this job served, minted by the\n   * node agent with the owner's enclave wallet. Binds the reserved payment to\n   * an on-chain `recordDataAccess`, exactly as the legacy paid read does.\n   * Required whenever the job reserved a fee.\n   */\n  accessRecord?: JobAccessRecord;\n}\n/** Request body for `POST /v1/jobs/:id/fail`. */\nexport interface FailRequest {\n  fencingToken: number;\n  reason: string; /* <= 1024, fail.ts:16 */\n}\n/** Successful response from a fenced job write endpoint. */\nexport interface FencedResponse {\n  success: true;\n  jobId: string;\n  state: JobState;\n  claimExpiresAt: string | null;\n}\n/** Inner plaintext of the result box (ECIES to builderPublicKey). */\nexport interface JobResult {\n  v: 1;\n  jobId: string;\n  scope: string;\n  version: string | null;\n  contentType: string;\n  /** Raw result bytes; callers decode text explicitly when appropriate. */\n  body: Uint8Array;\n}\n/** Admission lifecycle of a registered TEE node. */\nexport type TeeNodeState = \"pending\" | \"admitted\" | \"draining\" | \"removed\";\n/** Request body for `POST /v1/tee-nodes`. */\nexport interface TeeNodeRegistration {\n  nodeId: string;\n  appId: Hex;\n  composeHash: Hex;\n  publicUrl: string;\n  capacity: number;\n  secret: string;\n}\n/** Request body for `POST /v1/tee-nodes/:id/heartbeat`. */\nexport interface TeeNodeHeartbeat {\n  composeHash: Hex;\n  instanceId: string;\n  activeSandboxes: number;\n  capacity: number;\n}\n/** Public registration and capacity state for a TEE node. */\nexport interface TeeNode {\n  nodeId: string;\n  appId: Hex;\n  composeHash: Hex;\n  publicUrl: string;\n  state: TeeNodeState;\n  capacity: number;\n  activeSandboxes: number;\n  lastHeartbeatAt: string | null;\n}\n", "/**\n * Builder-side client for encrypted Gateway jobs.\n *\n * @remarks\n * This Node-only client fetches an owner's sealed enclave identity, signs and\n * seals raw-read work, submits it to the Gateway, polls builder-visible state,\n * and decrypts the bound result with the builder private key.\n *\n * @category Protocol\n */\n\nimport { randomUUID } from \"node:crypto\";\nimport { sha256 } from \"@noble/hashes/sha2\";\nimport {\n  bytesToHex,\n  isAddress,\n  isAddressEqual,\n  isHex,\n  keccak256,\n  toHex,\n  type Address,\n  type Hex,\n  type LocalAccount,\n} from \"viem\";\nimport { privateKeyToAccount, publicKeyToAddress } from \"viem/accounts\";\nimport {\n  buildWeb3SignedHeader,\n  computeBodyHash,\n} from \"../auth/web3-signed-builder\";\nimport type { ECIESProvider } from \"../crypto/ecies/interface\";\nimport { NodeECIESUint8Provider } from \"../crypto/ecies/node\";\nimport {\n  canonicalJobRequestBytes,\n  openJobResult,\n  sealJobRequest,\n} from \"../crypto/envelope/job\";\nimport {\n  BuilderUnknownError,\n  GrantInvalidError,\n  JobIdTakenError,\n  JobNotFoundError,\n  JobRejectedError,\n  JobResultIntegrityError,\n  JobRequestTooLargeError,\n  JobTimeoutError,\n  JobTransportError,\n  OwnerNotReadyError,\n  type JobGatewayErrorCode,\n  type JobsClientError,\n} from \"../errors\";\nimport { PaymentRequiredError } from \"../direct/errors\";\nimport { CONTRACTS } from \"../config/contracts.config\";\nimport { GENERIC_PAYMENT_TYPES, genericPaymentDomain } from \"./escrow\";\nimport { userPsId, type IdentityResponse } from \"./identity\";\nimport {\n  CLAIM_POLL_FLOOR_MS,\n  DEFAULT_JOB_DEADLINE_SECONDS,\n  JOB_OPERATIONS,\n  JOB_PROTOCOL_VERSION,\n  JOB_STATES,\n  MAX_JOB_DEADLINE_SECONDS,\n  MAX_WAIT_SECONDS,\n  type JobRequest,\n  type JobResult,\n  type JobOperation,\n  type JobState,\n  type JobPaymentAuthorization,\n  type JobQuote,\n  type JobStatus,\n  type JobSubmission,\n  type ResultHandle,\n} from \"./jobs\";\nimport { resolveWriteSigner, type WriteSignerSource } from \"./write-signer\";\n\nconst IDENTITY_PATH = \"/v1/identity\";\nconst JOBS_PATH = \"/v1/jobs\";\nconst JOB_QUOTE_PATH = \"/v1/jobs/quote\";\nconst JOB_EXECUTE_PATH = \"/v1/jobs/execute\";\n/**\n * `payments.op_type` for a job read. Distinct from the legacy standalone\n * `data_access` payment, whose opId is the receipt's recordId: a job is priced\n * before any receipt exists, so its opId is the job.\n */\nconst JOB_ACCESS_OP_TYPE = \"job_access\";\nconst AUTHORIZATION_HEADER = \"Authorization\";\nconst CONTENT_TYPE_HEADER = \"Content-Type\";\nconst JSON_CONTENT_TYPE = \"application/json\";\nconst GET_METHOD = \"GET\";\nconst POST_METHOD = \"POST\";\nconst RAW_READ_OPERATION = \"raw_read\";\nconst SEALED_IDENTITY_STATE = \"sealed\";\nconst HTTP_OK = 200;\nconst HTTP_ACCEPTED = 202;\nconst HTTP_UNAUTHORIZED = 401;\nconst HTTP_FORBIDDEN = 403;\nconst HTTP_NOT_FOUND = 404;\nconst HTTP_CONFLICT = 409;\nconst HTTP_PAYMENT_REQUIRED = 402;\nconst HTTP_PAYLOAD_TOO_LARGE = 413;\n/** High 32 bits ms, low 32 bits random: monotonic across ticks, unique within one. */\nconst NONCE_TIMESTAMP_SHIFT = 32n;\nconst UINT256_DECIMAL = /^(0|[1-9]\\d*)$/;\nconst POSITIVE_UINT256_DECIMAL = /^[1-9]\\d*$/;\nconst MILLISECONDS_PER_SECOND = 1_000;\nconst DEFAULT_JOB_TIMEOUT_MS = 120_000;\nconst DEFAULT_JOB_POLL_MS = CLAIM_POLL_FLOOR_MS;\nconst TERMINAL_JOB_STATES: ReadonlySet<JobState> = new Set([\n  \"completed\",\n  \"failed\",\n  \"expired\",\n  \"cancelled\",\n]);\n\n/** A viem local account that exposes the public key required by job requests. */\nexport type JobsBuilderAccount = Extract<LocalAccount, WriteSignerSource>;\n\n/** Configuration captured by {@link createJobsClient}. */\nexport interface JobsClientOptions {\n  /** Gateway base URL; its origin is the Web3Signed audience. */\n  gatewayUrl: string;\n  /** Vana chain ID used by the owner identity lookup. */\n  chainId: number;\n  /** Raw builder private key, used for signing and result decryption. */\n  builderPrivateKey?: Hex;\n  /**\n   * viem local account used for signing. Its public key supports submission,\n   * but without `builderPrivateKey` this client cannot decrypt results:\n   * `openResult` and `readRaw` reject while submit/status/wait remain usable.\n   */\n  builderAccount?: JobsBuilderAccount;\n  /** HTTP implementation; defaults to `globalThis.fetch`. */\n  fetch?: typeof fetch;\n  /** ECIES implementation; defaults to the Node provider. */\n  ecies?: ECIESProvider;\n  /** Clock used when constructing a job deadline. */\n  now?: () => Date;\n  /**\n   * `DataPortabilityEscrow` address for the payment signature's EIP-712 domain.\n   * Defaults to the deployment this SDK ships for `chainId`; override only when\n   * pointing at a non-canonical escrow.\n   */\n  escrowContract?: Address;\n}\n\n/** Parameters for one encrypted raw-read submission. */\nexport interface SubmitRawReadParams {\n  /** Owner whose enclave executes the read. */\n  owner: Address;\n  /** Owner-issued builder grant. */\n  grantId: Hex;\n  /** Data scope to read. */\n  scope: string;\n  /** Exact record version to require, or `null` for an unpinned read. */\n  pinnedVersion?: string | null;\n  /** Requested deadline offset, clamped to the protocol maximum. */\n  deadlineSeconds?: number;\n  /** Gateway inline-wait seconds, clamped to `0..MAX_WAIT_SECONDS`. */\n  wait?: number;\n  /**\n   * The most this read may cost, uint256 decimal. A quote above it is refused\n   * before anything is signed. Omit to accept whatever the chain's FeeRegistry\n   * says at submission time.\n   */\n  maxPrice?: string;\n  /**\n   * Reuse a job id across attempts instead of minting one.\n   *\n   * @remarks\n   * A charged read reserves escrow when the Gateway first accepts the job, so a\n   * response lost in transit is ambiguous: retrying with a fresh id would\n   * reserve a second time. Supply the id (and {@link idempotencyKey}) from\n   * durable storage and a resubmission replays the original job and reserves\n   * nothing. `JobTransportError.details` carries both back when a submission\n   * fails mid-flight.\n   */\n  jobId?: string;\n  idempotencyKey?: string;\n}\n\n/** Result of submitting an encrypted raw-read job. */\nexport interface SubmitRawReadResult {\n  /** Client-generated job UUID. */\n  jobId: string;\n  /** Current Gateway state. */\n  state: JobState;\n  /** Full status when the Gateway returned an inline 200 response. */\n  job?: JobStatus;\n}\n\n/** Polling controls for {@link JobsClient.waitForJob}. */\nexport interface WaitForJobOptions {\n  /** Total polling budget in milliseconds. */\n  timeoutMs?: number;\n  /** Delay between reads; values below `CLAIM_POLL_FLOOR_MS` are raised. */\n  pollMs?: number;\n}\n\n/** Expected plaintext bindings for {@link JobsClient.openResult}. */\nexport interface OpenJobResultOptions {\n  /** Bind the plaintext to this job id. */\n  expect: {\n    jobId: string;\n    scope?: string;\n    version?: string | null;\n  };\n}\n\n/** Parameters for the submit, wait, and decrypt convenience flow. */\nexport interface ReadRawParams extends SubmitRawReadParams, WaitForJobOptions {}\n\n/** Builder operations exposed by {@link createJobsClient}. */\nexport interface JobsClient {\n  /**\n   * Encrypt and submit a raw-read job.\n   *\n   * @param params - Owner, grant, scope, deadline, and inline-wait controls.\n   * @returns The job id and current state, plus inline status on HTTP 200.\n   * @throws {OwnerNotReadyError} When the owner identity is not sealed.\n   * @throws {JobsClientError} When the Gateway or transport rejects the call.\n   */\n  submitRawRead(params: SubmitRawReadParams): Promise<SubmitRawReadResult>;\n\n  /**\n   * Ask what one read costs on this chain before committing to it.\n   *\n   * @returns The chain's `data_access` fee, its asset, and whether the Gateway\n   * enforces it today.\n   * @throws {JobsClientError} When the Gateway or transport rejects the call.\n   *\n   * @remarks\n   * Optional: {@link JobsClient.submitRawRead} signs the quote the Gateway\n   * returns with its 402, so a builder that does not care about the price ahead\n   * of time never needs this call.\n   */\n  quoteJob(): Promise<JobQuote>;\n\n  /**\n   * Read one builder-visible job status.\n   *\n   * @param jobId - Client-generated job UUID.\n   * @returns The current job status.\n   * @throws {JobNotFoundError} When the job is absent or belongs to another builder.\n   * @throws {JobsClientError} For other Gateway or transport failures.\n   */\n  getJob(jobId: string): Promise<JobStatus>;\n\n  /**\n   * Poll until a job completes, fails, expires, or is cancelled.\n   *\n   * @param jobId - Job UUID to poll.\n   * @param options - Timeout and poll cadence.\n   * @returns The terminal job status.\n   * @throws {JobTimeoutError} When the caller or job deadline is exhausted.\n   */\n  waitForJob(jobId: string, options?: WaitForJobOptions): Promise<JobStatus>;\n\n  /**\n   * Fetch, decrypt, and validate a job result from object storage.\n   *\n   * @param handle - Object-storage location and integrity metadata.\n   * @param options - Expected plaintext job, scope, and version bindings.\n   * @returns The validated plaintext job result.\n   * @remarks Decryption requires `builderPrivateKey`; `builderAccount` alone\n   *   only supports submission, status reads, and waiting.\n   * @throws {JobRejectedError} When a raw private key is unavailable.\n   * @throws {JobTransportError} When fetching the result object fails.\n   * @throws {JobResultIntegrityError} When the fetched bytes mismatch the handle.\n   * @throws {JobEnvelopeError} When decrypted protocol fields or bindings differ.\n   */\n  openResult(\n    handle: ResultHandle,\n    options: OpenJobResultOptions,\n  ): Promise<JobResult>;\n\n  /**\n   * Submit, wait for, and decrypt one raw read.\n   *\n   * @param params - Raw-read request plus polling controls.\n   * @returns The decrypted, binding-checked job result.\n   * @remarks This convenience flow decrypts the result and therefore requires\n   *   `builderPrivateKey`; a client configured only with `builderAccount`\n   *   cannot call `readRaw`.\n   * @throws {JobsClientError} When submission, polling, or decryption setup fails.\n   * @throws {JobEnvelopeError} When decrypted result bindings differ.\n   *\n   * @example\n   * ```typescript\n   * const result = await client.readRaw({\n   *   owner,\n   *   grantId,\n   *   scope: \"profile.email\",\n   *   wait: 25,\n   * });\n   * ```\n   */\n  readRaw(params: ReadRawParams): Promise<JobResult>;\n}\n\ninterface ResolvedBuilder {\n  address: Address;\n  publicKey: Hex;\n  signMessage: ReturnType<typeof resolveWriteSigner>[\"signMessage\"];\n  /**\n   * Present on any account that can sign typed data, which is every local\n   * account. Absent only for a message-only signer, which cannot authorize a\n   * price \u2014 so paying fails with a clear error rather than at construction,\n   * where most reads are free and the signer would never be asked.\n   */\n  signTypedData?: LocalAccount[\"signTypedData\"];\n}\n\ninterface GatewayErrorBody {\n  code: JobGatewayErrorCode | null;\n  message: string;\n  reason?: string;\n  details?: Record<string, unknown>;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction normalizeGateway(gatewayUrl: string): {\n  baseUrl: string;\n  audience: string;\n} {\n  try {\n    const url = new URL(gatewayUrl);\n    if (url.pathname !== \"/\" || url.search !== \"\" || url.hash !== \"\") {\n      throw new JobRejectedError(\n        \"gatewayUrl must be an origin without a path, query, or fragment\",\n      );\n    }\n    return {\n      baseUrl: url.origin,\n      audience: url.origin,\n    };\n  } catch (error) {\n    if (error instanceof JobRejectedError) throw error;\n    throw new JobRejectedError(\n      \"gatewayUrl must be an absolute URL\",\n      undefined,\n      null,\n      {\n        cause: error instanceof Error ? error.message : String(error),\n      },\n    );\n  }\n}\n\nfunction resolveFetch(fetchFn?: typeof fetch): typeof fetch {\n  const resolved = fetchFn ?? globalThis.fetch;\n  if (resolved === undefined) {\n    throw new JobRejectedError(\"No fetch implementation available\");\n  }\n  return resolved;\n}\n\nfunction sourcePublicKey(source: WriteSignerSource): Hex | undefined {\n  if (isRecord(source) && typeof source[\"publicKey\"] === \"string\") {\n    return source[\"publicKey\"] as Hex;\n  }\n  return undefined;\n}\n\nfunction resolveBuilder(options: JobsClientOptions): {\n  builder: ResolvedBuilder;\n  privateKey?: Hex;\n} {\n  if (options.builderPrivateKey && options.builderAccount) {\n    throw new JobRejectedError(\n      \"Provide builderPrivateKey or builderAccount, not both\",\n    );\n  }\n  let source: WriteSignerSource | undefined;\n  try {\n    source = options.builderPrivateKey\n      ? privateKeyToAccount(options.builderPrivateKey)\n      : options.builderAccount;\n  } catch (error) {\n    throw new JobRejectedError(\"Invalid builder private key\", undefined, null, {\n      cause: error instanceof Error ? error.message : String(error),\n    });\n  }\n  if (!source) {\n    throw new JobRejectedError(\n      \"builderPrivateKey or builderAccount is required\",\n    );\n  }\n  let signer: ReturnType<typeof resolveWriteSigner>;\n  try {\n    signer = resolveWriteSigner(source);\n  } catch (error) {\n    throw new JobRejectedError(\"Invalid builder signer\", undefined, null, {\n      cause: error instanceof Error ? error.message : String(error),\n    });\n  }\n  const publicKey = sourcePublicKey(source);\n  if (!signer.address || !publicKey) {\n    throw new JobRejectedError(\n      \"Builder signer must expose both address and publicKey\",\n    );\n  }\n  const typedDataSigner = (source as Partial<LocalAccount>).signTypedData;\n  return {\n    builder: {\n      address: signer.address,\n      publicKey,\n      signMessage: signer.signMessage,\n      ...(typedDataSigner\n        ? {\n            signTypedData: typedDataSigner.bind(\n              source,\n            ) as LocalAccount[\"signTypedData\"],\n          }\n        : {}),\n    },\n    ...(options.builderPrivateKey\n      ? { privateKey: options.builderPrivateKey }\n      : {}),\n  };\n}\n\nfunction clampInteger(\n  value: number | undefined,\n  fallback: number,\n  minimum: number,\n  maximum: number,\n  field: string,\n): number {\n  const resolved = value ?? fallback;\n  if (!Number.isFinite(resolved)) {\n    throw new JobRejectedError(`${field} must be a finite number`);\n  }\n  return Math.min(maximum, Math.max(minimum, Math.trunc(resolved)));\n}\n\nasync function responseBody(response: Response): Promise<unknown> {\n  try {\n    return await response.json();\n  } catch {\n    return null;\n  }\n}\n\nfunction gatewayErrorBody(body: unknown, fallback: string): GatewayErrorBody {\n  if (!isRecord(body)) return { code: null, message: fallback };\n  const code = typeof body[\"code\"] === \"string\" ? body[\"code\"] : null;\n  const message =\n    typeof body[\"error\"] === \"string\"\n      ? body[\"error\"]\n      : typeof body[\"message\"] === \"string\"\n        ? body[\"message\"]\n        : fallback;\n  const reason =\n    typeof body[\"reason\"] === \"string\" ? body[\"reason\"] : undefined;\n  const details = isRecord(body[\"details\"]) ? body[\"details\"] : undefined;\n  return {\n    code,\n    message,\n    ...(reason ? { reason } : {}),\n    ...(details ? { details } : {}),\n  };\n}\n\nasync function rejectedResponse(\n  response: Response,\n  fallback: string,\n): Promise<JobsClientError> {\n  const parsed = gatewayErrorBody(await responseBody(response), fallback);\n  const details =\n    response.status === HTTP_UNAUTHORIZED && parsed.reason\n      ? { ...parsed.details, reason: parsed.reason }\n      : parsed.details;\n  const message =\n    response.status === HTTP_UNAUTHORIZED && parsed.reason\n      ? `${parsed.message}: ${parsed.reason}`\n      : parsed.message;\n  if (response.status === HTTP_FORBIDDEN) {\n    if (parsed.code === \"BUILDER_UNKNOWN\") {\n      return new BuilderUnknownError(parsed.message, details);\n    }\n    if (parsed.code === \"GRANT_INVALID\") {\n      return new GrantInvalidError(parsed.message, details);\n    }\n    if (parsed.code === \"OWNER_NOT_READY\") {\n      return new OwnerNotReadyError(parsed.message, details);\n    }\n  }\n  if (response.status === HTTP_NOT_FOUND) {\n    return new JobNotFoundError(parsed.message, details);\n  }\n  if (response.status === HTTP_CONFLICT && parsed.code === \"JOB_ID_TAKEN\") {\n    return new JobIdTakenError(parsed.message, details);\n  }\n  if (response.status === HTTP_PAYLOAD_TOO_LARGE) {\n    return new JobRequestTooLargeError(parsed.message, parsed.code, details);\n  }\n  return new JobRejectedError(message, response.status, parsed.code, details);\n}\n\nfunction requireStatus(value: unknown, status: number): JobStatus {\n  if (\n    !isRecord(value) ||\n    !isNonEmptyString(value[\"jobId\"]) ||\n    typeof value[\"state\"] !== \"string\" ||\n    !JOB_STATES.includes(value[\"state\"] as JobState) ||\n    !isNonEmptyString(value[\"owner\"]) ||\n    !isNonEmptyString(value[\"grantId\"]) ||\n    !isNonEmptyString(value[\"scope\"]) ||\n    !isNonEmptyString(value[\"operation\"]) ||\n    !JOB_OPERATIONS.includes(value[\"operation\"] as JobOperation) ||\n    (value[\"state\"] === \"completed\" && !isResultHandle(value[\"result\"]))\n  ) {\n    throw new JobRejectedError(\n      \"Gateway response did not contain a job status\",\n      status,\n    );\n  }\n  return value as unknown as JobStatus;\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n  return typeof value === \"string\" && value.length > 0;\n}\n\nfunction isResultHandle(value: unknown): value is ResultHandle {\n  if (\n    !isRecord(value) ||\n    !isNonEmptyString(value[\"objectKey\"]) ||\n    !isNonEmptyString(value[\"url\"]) ||\n    typeof value[\"size\"] !== \"number\" ||\n    !Number.isInteger(value[\"size\"]) ||\n    value[\"size\"] < 0 ||\n    typeof value[\"hash\"] !== \"string\" ||\n    !/^0x[0-9a-fA-F]{64}$/.test(value[\"hash\"]) ||\n    typeof value[\"expiresAt\"] !== \"string\" ||\n    Number.isNaN(Date.parse(value[\"expiresAt\"]))\n  ) {\n    return false;\n  }\n  try {\n    const url = new URL(value[\"url\"]);\n    return url.protocol === \"https:\" || url.protocol === \"http:\";\n  } catch {\n    return false;\n  }\n}\n\nfunction hasMatchingIdentityKey(value: Record<string, unknown>): boolean {\n  const address = value[\"address\"];\n  const publicKey = value[\"publicKey\"];\n  if (\n    typeof address !== \"string\" ||\n    !isAddress(address) ||\n    typeof publicKey !== \"string\" ||\n    !isHex(publicKey)\n  ) {\n    return false;\n  }\n  try {\n    return (\n      publicKeyToAddress(publicKey).toLowerCase() === address.toLowerCase()\n    );\n  } catch {\n    return false;\n  }\n}\n\nfunction hasExpectedIdentity(\n  value: Record<string, unknown>,\n  owner: Address,\n  chainId: number,\n): boolean {\n  const identityOwner = value[\"ownerAddress\"];\n  const identityChainId = value[\"chainId\"];\n  const identityUserPsId = value[\"userPsId\"];\n  if (\n    !hasMatchingIdentityKey(value) ||\n    typeof identityOwner !== \"string\" ||\n    !isAddress(identityOwner) ||\n    typeof identityChainId !== \"number\" ||\n    typeof identityUserPsId !== \"string\" ||\n    !isHex(identityUserPsId)\n  ) {\n    return false;\n  }\n  return (\n    isAddressEqual(identityOwner, owner) &&\n    identityChainId === chainId &&\n    identityUserPsId.toLowerCase() === userPsId(chainId, owner).toLowerCase()\n  );\n}\n\nfunction sleep(ms: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * The escrow the payment signature names. Resolved from the chain the client is\n * configured for, so a builder never has to know the address.\n *\n * Resolved when a price is actually signed, not at construction: most reads are\n * free, and a client on a chain with no escrow deployment must still be able to\n * submit them.\n */\nfunction resolveEscrowContract(options: JobsClientOptions): Address {\n  if (options.escrowContract) return options.escrowContract;\n  const addresses = CONTRACTS[\"DataPortabilityEscrow\"]?.addresses as\n    | Record<number, string>\n    | undefined;\n  const address = addresses?.[options.chainId];\n  if (!address || !isAddress(address)) {\n    throw new JobRejectedError(\n      `No DataPortabilityEscrow address for chain ${options.chainId}; pass escrowContract`,\n    );\n  }\n  return address as Address;\n}\n\n/**\n * High 32 bits are the millisecond clock, low 32 bits are random: strictly\n * increasing across ticks, collision-free within one. Matches the nonce the\n * Personal Server mints for a legacy paid read.\n */\nfunction nextPaymentNonce(): bigint {\n  const random = new Uint32Array(1);\n  globalThis.crypto.getRandomValues(random);\n  return (BigInt(Date.now()) << NONCE_TIMESTAMP_SHIFT) + BigInt(random[0] ?? 0);\n}\n\n/** Validate every field rather than assert the shape of an external body. */\nfunction parseJobQuote(body: unknown): JobQuote | null {\n  if (!isRecord(body)) return null;\n  const { chainId, price, asset, payable, enforced } = body;\n  if (typeof chainId !== \"number\" || !Number.isSafeInteger(chainId))\n    return null;\n  if (typeof price !== \"string\" || !UINT256_DECIMAL.test(price)) return null;\n  if (typeof asset !== \"string\" || !isAddress(asset)) return null;\n  if (typeof payable !== \"boolean\" || typeof enforced !== \"boolean\")\n    return null;\n  return { chainId, price, asset: asset as Address, payable, enforced };\n}\n\n/** The price the Gateway is asking for, parsed from its 402. */\nasync function paymentQuote(\n  response: Response,\n): Promise<{ asset: Address; amount: string }> {\n  const body = await responseBody(response);\n  const asset = isRecord(body) ? body[\"asset\"] : undefined;\n  const amount = isRecord(body) ? body[\"amount\"] : undefined;\n  if (\n    typeof asset !== \"string\" ||\n    !isAddress(asset) ||\n    typeof amount !== \"string\" ||\n    !POSITIVE_UINT256_DECIMAL.test(amount)\n  ) {\n    throw new JobRejectedError(\n      \"Gateway asked for payment without a usable quote\",\n      response.status,\n    );\n  }\n  return { asset: asset as Address, amount };\n}\n\n/** A second 402: the escrow cannot back this read, or the price moved. */\nasync function paymentRefusal(\n  response: Response,\n): Promise<{ message: string; details: Record<string, unknown> }> {\n  const body = await responseBody(response);\n  const parsed = isRecord(body) ? body : {};\n  const message =\n    typeof parsed[\"error\"] === \"string\"\n      ? parsed[\"error\"]\n      : \"This read requires payment the builder escrow cannot back\";\n  return { message, details: parsed };\n}\n\nfunction requireFiniteDuration(value: number, field: string): number {\n  if (!Number.isFinite(value)) {\n    throw new JobRejectedError(`${field} must be a finite number`);\n  }\n  return Math.max(0, value);\n}\n\n/**\n * Create a reusable Node builder client for encrypted Gateway jobs.\n *\n * @param options - Gateway, chain, builder signer, and injectable adapters.\n * @returns A client bound to the configured builder and Gateway.\n * @throws {JobRejectedError} When configuration or signer shape is invalid.\n *\n * @remarks\n * This client is Node-only. `builderPrivateKey` supports the complete flow;\n * `builderAccount` alone supports submit/status/wait but cannot decrypt, so\n * `openResult` and `readRaw` require the raw private key.\n *\n * @example\n * ```typescript\n * const client = createJobsClient({\n *   gatewayUrl: \"https://gateway.example.com\",\n *   chainId: 14800,\n *   builderPrivateKey: process.env.BUILDER_PRIVATE_KEY as Hex,\n * });\n * const result = await client.readRaw({ owner, grantId, scope: \"profile\" });\n * ```\n */\nexport function createJobsClient(options: JobsClientOptions): JobsClient {\n  const { baseUrl, audience } = normalizeGateway(options.gatewayUrl);\n  const fetchFn = resolveFetch(options.fetch);\n  const { builder, privateKey } = resolveBuilder(options);\n  const ecies = options.ecies ?? new NodeECIESUint8Provider();\n  const now = options.now ?? (() => new Date());\n\n  /**\n   * Sign the Gateway's quote as the same EIP-712 `GenericPayment` a legacy\n   * Personal Server read signs into its `X-PAYMENT` header. The Gateway stores\n   * it verbatim on the payment row, so one money artifact covers both paths.\n   */\n  async function signQuote(\n    jobId: string,\n    quote: { asset: Address; amount: string },\n  ): Promise<JobPaymentAuthorization> {\n    if (!builder.signTypedData) {\n      throw new JobRejectedError(\n        \"This read is charged, but the builder signer cannot sign typed data\",\n      );\n    }\n    const paymentNonce = nextPaymentNonce();\n    const signature = await builder.signTypedData({\n      domain: genericPaymentDomain(\n        options.chainId,\n        resolveEscrowContract(options),\n      ),\n      types: GENERIC_PAYMENT_TYPES,\n      primaryType: \"GenericPayment\",\n      message: {\n        payerAddress: builder.address,\n        opType: JOB_ACCESS_OP_TYPE,\n        opId: keccak256(toHex(jobId.toLowerCase())),\n        asset: quote.asset,\n        amount: BigInt(quote.amount),\n        paymentNonce,\n      },\n    });\n    return {\n      signature,\n      amount: quote.amount,\n      asset: quote.asset,\n      paymentNonce: paymentNonce.toString(),\n    };\n  }\n\n  async function postSubmission(\n    submission: JobSubmission,\n    wait: number,\n  ): Promise<Response> {\n    const identifiers = {\n      jobId: submission.jobId,\n      idempotencyKey: submission.idempotencyKey,\n    };\n    const bodyBytes = new TextEncoder().encode(JSON.stringify(submission));\n    const authorization = await buildWeb3SignedHeader({\n      signMessage: builder.signMessage,\n      aud: audience,\n      method: POST_METHOD,\n      uri: JOBS_PATH,\n      body: bodyBytes,\n      nonce: randomUUID(),\n    });\n    try {\n      return await request(\n        `${baseUrl}${JOBS_PATH}?wait=${wait}`,\n        {\n          method: POST_METHOD,\n          headers: {\n            [AUTHORIZATION_HEADER]: authorization,\n            [CONTENT_TYPE_HEADER]: JSON_CONTENT_TYPE,\n          },\n          body: bodyBytes,\n        },\n        \"Job submission\",\n      );\n    } catch (error) {\n      // The Gateway may have committed the job and its escrow reservation\n      // before the response was lost. Hand the ids back so the caller can\n      // resubmit them or reconcile with getJob, rather than mint new ones and\n      // reserve twice.\n      if (error instanceof JobTransportError) {\n        throw new JobTransportError(error.message, error.cause, {\n          ...error.details,\n          ...identifiers,\n        });\n      }\n      throw error;\n    }\n  }\n\n  async function request(\n    url: string,\n    init: RequestInit,\n    description: string,\n  ): Promise<Response> {\n    try {\n      return await fetchFn(url, init);\n    } catch (error) {\n      throw new JobTransportError(\n        `${description} failed: ${error instanceof Error ? error.message : String(error)}`,\n        error,\n      );\n    }\n  }\n\n  async function getIdentity(\n    owner: Address,\n  ): Promise<IdentityResponse[\"identity\"]> {\n    const query = new URLSearchParams({\n      owner,\n      chainId: String(options.chainId),\n    });\n    const response = await request(\n      `${baseUrl}${IDENTITY_PATH}?${query.toString()}`,\n      { method: GET_METHOD },\n      \"Owner identity lookup\",\n    );\n    if (response.status === HTTP_NOT_FOUND) {\n      const parsed = gatewayErrorBody(\n        await responseBody(response),\n        \"Owner identity not found\",\n      );\n      throw new OwnerNotReadyError(parsed.message, parsed.details);\n    }\n    if (!response.ok) {\n      throw await rejectedResponse(response, \"Owner identity lookup rejected\");\n    }\n    const body = await responseBody(response);\n    if (\n      !isRecord(body) ||\n      body[\"state\"] !== SEALED_IDENTITY_STATE ||\n      !isRecord(body[\"identity\"])\n    ) {\n      throw new OwnerNotReadyError(\"Owner identity is not sealed\", {\n        state: isRecord(body) ? body[\"state\"] : undefined,\n      });\n    }\n    if (!hasExpectedIdentity(body[\"identity\"], owner, options.chainId)) {\n      throw new JobRejectedError(\n        \"Gateway returned a malformed or mismatched owner identity\",\n        response.status,\n      );\n    }\n    // Full TDX/KMS evidence verification awaits provisioned trust anchors and is intentionally outside this driver-matching client.\n    return body[\"identity\"] as unknown as IdentityResponse[\"identity\"];\n  }\n\n  const client: JobsClient = {\n    async submitRawRead(params) {\n      const identity = await getIdentity(params.owner);\n      const deadlineSeconds = clampInteger(\n        params.deadlineSeconds,\n        DEFAULT_JOB_DEADLINE_SECONDS,\n        1,\n        MAX_JOB_DEADLINE_SECONDS,\n        \"deadlineSeconds\",\n      );\n      const wait = clampInteger(params.wait, 0, 0, MAX_WAIT_SECONDS, \"wait\");\n      // Caller-supplied ids make a resubmission exactly-once: the Gateway\n      // replays the original job and reserves nothing. Without them a lost\n      // response is ambiguous, so the transport error carries both back.\n      const jobId = params.jobId ?? randomUUID();\n      const idempotencyKey = params.idempotencyKey ?? randomUUID();\n      const nowMs = now().getTime();\n      if (!Number.isFinite(nowMs)) {\n        throw new JobRejectedError(\"now must return a valid Date\");\n      }\n      const deadline = new Date(\n        nowMs + deadlineSeconds * MILLISECONDS_PER_SECOND,\n      ).toISOString();\n      const requestBody: JobRequest = {\n        v: JOB_PROTOCOL_VERSION,\n        jobId,\n        owner: params.owner,\n        builder: builder.address,\n        builderPublicKey: builder.publicKey,\n        grantId: params.grantId,\n        scope: params.scope,\n        operation: RAW_READ_OPERATION,\n        pinnedVersion: params.pinnedVersion ?? null,\n        deadline,\n      };\n      const auth = await buildWeb3SignedHeader({\n        signMessage: builder.signMessage,\n        aud: audience,\n        method: POST_METHOD,\n        uri: JOB_EXECUTE_PATH,\n        bodyHash: computeBodyHash(canonicalJobRequestBytes(requestBody)),\n        nonce: randomUUID(),\n      });\n      const requestCiphertext = await sealJobRequest(\n        { request: requestBody, auth },\n        identity.publicKey,\n        ecies,\n      );\n      const submission: JobSubmission = {\n        owner: requestBody.owner,\n        grantId: requestBody.grantId,\n        scope: requestBody.scope,\n        operation: requestBody.operation,\n        idempotencyKey,\n        jobId,\n        deadline,\n        requestCiphertext,\n        ...(params.maxPrice === undefined ? {} : { maxPrice: params.maxPrice }),\n      };\n      let response = await postSubmission(submission, wait);\n\n      // The Gateway answers an unpaid charged read with its quote, exactly as a\n      // Personal Server answers an unpaid legacy read with a 402 challenge. Sign\n      // the quote and retry once. The header is built once per attempt and the\n      // job id is unchanged, so a refused first attempt left no job behind and\n      // the retry cannot mint a second charge.\n      if (response.status === HTTP_PAYMENT_REQUIRED) {\n        const quote = await paymentQuote(response);\n        // Refuse before signing, not after. The Gateway rechecks the ceiling,\n        // but an EIP-712 authorization above what the builder agreed to must\n        // never leave this process \u2014 once signed it is a standalone artifact.\n        if (\n          params.maxPrice !== undefined &&\n          BigInt(quote.amount) > BigInt(params.maxPrice)\n        ) {\n          throw new PaymentRequiredError(\n            \"The quoted price is above the maxPrice you set for this read\",\n            {\n              jobId,\n              scope: params.scope,\n              grantId: params.grantId,\n              asset: quote.asset,\n              amount: quote.amount,\n              maxPrice: params.maxPrice,\n            },\n          );\n        }\n        submission.payment = await signQuote(jobId, quote);\n        submission.priceAsset = quote.asset;\n        response = await postSubmission(submission, wait);\n        if (response.status === HTTP_PAYMENT_REQUIRED) {\n          const refusal = await paymentRefusal(response);\n          throw new PaymentRequiredError(refusal.message, {\n            jobId,\n            scope: params.scope,\n            grantId: params.grantId,\n            ...refusal.details,\n          });\n        }\n      }\n\n      if (!response.ok) {\n        throw await rejectedResponse(response, \"Job submission rejected\");\n      }\n      const body = await responseBody(response);\n      if (response.status === HTTP_OK && isRecord(body)) {\n        const job = requireStatus(body[\"job\"], response.status);\n        if (job.jobId !== jobId) {\n          throw new JobRejectedError(\n            \"Gateway returned a job id that does not match the submission\",\n            response.status,\n          );\n        }\n        return { jobId, state: job.state, job };\n      }\n      if (\n        response.status === HTTP_ACCEPTED &&\n        isRecord(body) &&\n        body[\"jobId\"] === jobId &&\n        typeof body[\"state\"] === \"string\" &&\n        JOB_STATES.includes(body[\"state\"] as JobState)\n      ) {\n        return { jobId, state: body[\"state\"] as JobState };\n      }\n      throw new JobRejectedError(\n        \"Gateway returned an undocumented job submission response\",\n        response.status,\n      );\n    },\n\n    async quoteJob() {\n      const authorization = await buildWeb3SignedHeader({\n        signMessage: builder.signMessage,\n        aud: audience,\n        method: GET_METHOD,\n        uri: JOB_QUOTE_PATH,\n        nonce: randomUUID(),\n      });\n      const response = await request(\n        `${baseUrl}${JOB_QUOTE_PATH}`,\n        {\n          method: GET_METHOD,\n          headers: { [AUTHORIZATION_HEADER]: authorization },\n        },\n        \"Job quote\",\n      );\n      if (!response.ok) {\n        throw await rejectedResponse(response, \"Job quote rejected\");\n      }\n      const quote = parseJobQuote(await responseBody(response));\n      if (!quote) {\n        throw new JobRejectedError(\n          \"Gateway returned an undocumented job quote\",\n          response.status,\n        );\n      }\n      // A quote priced on another chain would be signed against the wrong\n      // escrow domain and refused, so reject it here where the reason is clear.\n      if (quote.chainId !== options.chainId) {\n        throw new JobRejectedError(\n          `Gateway quoted chain ${quote.chainId}, not the configured ${options.chainId}`,\n          response.status,\n        );\n      }\n      return quote;\n    },\n\n    async getJob(jobId) {\n      const path = `${JOBS_PATH}/${encodeURIComponent(jobId)}`;\n      const authorization = await buildWeb3SignedHeader({\n        signMessage: builder.signMessage,\n        aud: audience,\n        method: GET_METHOD,\n        uri: path,\n        nonce: randomUUID(),\n      });\n      const response = await request(\n        `${baseUrl}${path}`,\n        {\n          method: GET_METHOD,\n          headers: { [AUTHORIZATION_HEADER]: authorization },\n        },\n        \"Job status read\",\n      );\n      if (!response.ok) {\n        throw await rejectedResponse(response, \"Job status read rejected\");\n      }\n      const body = await responseBody(response);\n      return requireStatus(\n        isRecord(body) ? body[\"job\"] : undefined,\n        response.status,\n      );\n    },\n\n    async waitForJob(jobId, waitOptions = {}) {\n      const timeoutMs = requireFiniteDuration(\n        waitOptions.timeoutMs ?? DEFAULT_JOB_TIMEOUT_MS,\n        \"timeoutMs\",\n      );\n      const pollMs = Math.max(\n        CLAIM_POLL_FLOOR_MS,\n        requireFiniteDuration(\n          waitOptions.pollMs ?? DEFAULT_JOB_POLL_MS,\n          \"pollMs\",\n        ),\n      );\n      const startedAt = Date.now();\n      const callerDeadline = startedAt + timeoutMs;\n      let latest: JobStatus | undefined;\n      for (;;) {\n        if (Date.now() >= callerDeadline) {\n          throw new JobTimeoutError(\n            `Timed out waiting for terminal job ${jobId}`,\n            {\n              jobId,\n              timeoutMs,\n              state: latest?.state,\n            },\n          );\n        }\n        latest = await client.getJob(jobId);\n        if (TERMINAL_JOB_STATES.has(latest.state)) return latest;\n        const remaining = callerDeadline - Date.now();\n        if (remaining <= 0) {\n          throw new JobTimeoutError(\n            `Timed out waiting for terminal job ${jobId}`,\n            {\n              jobId,\n              timeoutMs,\n              state: latest.state,\n            },\n          );\n        }\n        await sleep(Math.min(pollMs, remaining));\n      }\n    },\n\n    async openResult(handle, openOptions) {\n      if (!privateKey) {\n        throw new JobRejectedError(\n          \"openResult requires createJobsClient({ builderPrivateKey })\",\n        );\n      }\n      const response = await request(\n        handle.url,\n        { method: GET_METHOD },\n        \"Job result fetch\",\n      );\n      if (!response.ok) {\n        throw await rejectedResponse(response, \"Job result fetch rejected\");\n      }\n      let bytes: Uint8Array;\n      try {\n        bytes = new Uint8Array(await response.arrayBuffer());\n      } catch (error) {\n        throw new JobTransportError(\n          `Job result fetch failed: ${error instanceof Error ? error.message : String(error)}`,\n          error,\n        );\n      }\n      const actualHash = bytesToHex(sha256(bytes));\n      if (actualHash.toLowerCase() !== handle.hash.toLowerCase()) {\n        throw new JobResultIntegrityError(\n          \"Fetched job result hash does not match its handle\",\n          {\n            objectKey: handle.objectKey,\n            expectedHash: handle.hash,\n            actualHash,\n          },\n        );\n      }\n      if (bytes.length !== handle.size) {\n        throw new JobResultIntegrityError(\n          \"Fetched job result size does not match its handle\",\n          {\n            objectKey: handle.objectKey,\n            expectedSize: handle.size,\n            actualSize: bytes.length,\n          },\n        );\n      }\n      return openJobResult(bytes, privateKey, ecies, openOptions.expect);\n    },\n\n    async readRaw(params) {\n      const submitted = await client.submitRawRead(params);\n      const job =\n        submitted.job && TERMINAL_JOB_STATES.has(submitted.job.state)\n          ? submitted.job\n          : await client.waitForJob(submitted.jobId, {\n              timeoutMs: params.timeoutMs,\n              pollMs: params.pollMs,\n            });\n      if (job.state !== \"completed\") {\n        throw new JobRejectedError(\n          `Job ${job.jobId} ended in state ${job.state}${job.failureReason ? `: ${job.failureReason}` : \"\"}`,\n          undefined,\n          null,\n          {\n            jobId: job.jobId,\n            state: job.state,\n            ...(job.failureReason ? { failureReason: job.failureReason } : {}),\n          },\n        );\n      }\n      if (!job.result) {\n        throw new JobRejectedError(\n          \"Completed job status does not include a result handle\",\n          undefined,\n          null,\n          { jobId: job.jobId, state: job.state },\n        );\n      }\n      return client.openResult(job.result, {\n        expect: {\n          jobId: submitted.jobId,\n          scope: params.scope,\n          ...(params.pinnedVersion !== undefined &&\n          params.pinnedVersion !== null\n            ? { version: params.pinnedVersion }\n            : {}),\n        },\n      });\n    },\n  };\n\n  return client;\n}\n", "/**\n * ECIES envelopes for encrypted job requests and results.\n *\n * Request plaintext is UTF-8 JSON with object keys sorted recursively and\n * array order preserved. Result bodies use a hybrid streaming envelope:\n * ECIES wraps a random AES key, nonce prefix, and result metadata, while fixed\n * chunks of the body are sealed independently with AES-256-GCM. The Request\n * ciphertext is base64 of `iv || ephemPub || ct || mac`, as specified by the\n * ECIES provider interface. Result ciphertext is the raw hybrid byte sequence\n * stored in object storage. The Gateway hashes raw ciphertext bytes, not\n * plaintext.\n * The builder verifies the decrypted result's job ID, scope, and version\n * bindings. The PS worker verifies\n * `auth.bodyHash === sha256(canonicalJobRequestBytes(request))`; the Gateway\n * never sees the plaintext. Flow: personal-server-ts\n * `docs/260903-jobs-contract.md`, section 1.\n *\n * @category Cryptography\n */\n\nimport { sha256 } from \"@noble/hashes/sha2\";\nimport { bytesToHex, fromHex, isAddress, isHex, toHex, type Hex } from \"viem\";\nimport { CURVE, FORMAT, MAC } from \"../ecies/constants\";\nimport {\n  deserializeECIES,\n  ECIESError,\n  serializeECIES,\n  type ECIESEncrypted,\n  type ECIESProvider,\n} from \"../ecies/interface\";\nimport {\n  JOB_OPERATIONS,\n  JOB_PROTOCOL_VERSION,\n  type JobOperation,\n  type JobRequest,\n  type JobRequestEnvelope,\n  type JobResult,\n} from \"../../protocol/jobs\";\nimport { fromBase64, toBase64 } from \"../../utils/encoding\";\n\nconst textDecoder = new TextDecoder();\nconst textEncoder = new TextEncoder();\n/** Result metadata is only a few short fields; cap it before decoding attacker-reachable bytes. */\nconst MAX_JOB_RESULT_HEADER_BYTES = 4096;\nconst WRAPPED_KEY_LENGTH_BYTES = 4;\nconst FRAME_LENGTH_BYTES = 4;\nconst FRAME_FLAGS_BYTES = 1;\nconst AES_KEY_BYTES = 32;\nconst AES_GCM_NONCE_BYTES = 12;\nconst AES_GCM_TAG_BYTES = 16;\nconst WRAPPED_METADATA_LENGTH_BYTES = 4;\nconst WRAPPED_KEY_PLAINTEXT_PREFIX_BYTES =\n  AES_KEY_BYTES + AES_GCM_NONCE_BYTES + WRAPPED_METADATA_LENGTH_BYTES;\nconst MAX_WRAPPED_KEY_BYTES = 8192;\nconst FINAL_FRAME_FLAG = 1;\nconst MAX_CHUNK_INDEX = 0xffffffff;\n\n/** Current hybrid sealed-result wire-format version. */\nexport const JOB_RESULT_FORMAT_VERSION = 2;\n/** Plaintext bytes authenticated independently in each result frame. */\nexport const JOB_RESULT_CHUNK_BYTES = 1024 * 1024;\n\n/** Result fields authenticated for every encrypted body chunk. */\nexport type JobResultMetadata = Omit<JobResult, \"body\">;\n\n/** Streaming sealer output. Write the header before transformed body frames. */\nexport interface SealedJobResultStream {\n  header: Uint8Array;\n  transform: TransformStream<Uint8Array, Uint8Array>;\n}\n\n/** Verified metadata and incrementally decrypted result body. */\nexport interface OpenedJobResultStream {\n  metadata: JobResultMetadata;\n  body: ReadableStream<Uint8Array>;\n}\n\n/** Builder-visible bindings checked before any result body chunk is yielded. */\nexport interface JobResultExpectation {\n  jobId: string;\n  scope?: string;\n  version?: string | null;\n}\n\n/** A job envelope or result did not match the jobs protocol. */\nexport class JobEnvelopeError extends Error {\n  constructor(message: string) {\n    super(message);\n    this.name = \"JobEnvelopeError\";\n  }\n}\n\nfunction sortJsonKeys(value: unknown): unknown {\n  if (Array.isArray(value)) {\n    return value.map(sortJsonKeys);\n  }\n  if (value !== null && typeof value === \"object\") {\n    return Object.fromEntries(\n      Object.keys(value)\n        .sort()\n        .map((key) => [\n          key,\n          sortJsonKeys((value as Record<string, unknown>)[key]),\n        ]),\n    );\n  }\n  return value;\n}\n\nfunction canonicalJsonBytes(value: unknown): Uint8Array {\n  return textEncoder.encode(JSON.stringify(sortJsonKeys(value)));\n}\n\n/**\n * Returns the canonical UTF-8 JSON bytes committed to by the auth body hash.\n *\n * @param request - Job request to validate and serialize canonically.\n * @returns Recursively key-sorted, whitespace-free UTF-8 JSON bytes.\n * @throws {JobEnvelopeError} If the request does not match the protocol schema.\n */\nexport function canonicalJobRequestBytes(request: JobRequest): Uint8Array {\n  validateJobRequest(request);\n  return canonicalJsonBytes(request);\n}\n\nfunction requestPlaintext(envelope: JobRequestEnvelope): Uint8Array {\n  validateRequestEnvelope(envelope);\n  return canonicalJsonBytes(envelope);\n}\n\nfunction resultMetadata(result: JobResult): JobResultMetadata {\n  return {\n    v: result.v,\n    jobId: result.jobId,\n    scope: result.scope,\n    version: result.version,\n    contentType: result.contentType,\n  };\n}\n\nfunction encryptedBytesToBase64(\n  encrypted: Awaited<ReturnType<ECIESProvider[\"encrypt\"]>>,\n): string {\n  return toBase64(fromHex(`0x${serializeECIES(encrypted)}`, \"bytes\"));\n}\n\nfunction encryptedToBytes(\n  encrypted: Awaited<ReturnType<ECIESProvider[\"encrypt\"]>>,\n): Uint8Array {\n  const bytes = new Uint8Array(\n    encrypted.iv.length +\n      encrypted.ephemPublicKey.length +\n      encrypted.ciphertext.length +\n      encrypted.mac.length,\n  );\n  let offset = 0;\n  bytes.set(encrypted.iv, offset);\n  offset += encrypted.iv.length;\n  bytes.set(encrypted.ephemPublicKey, offset);\n  offset += encrypted.ephemPublicKey.length;\n  bytes.set(encrypted.ciphertext, offset);\n  offset += encrypted.ciphertext.length;\n  bytes.set(encrypted.mac, offset);\n  return bytes;\n}\n\nfunction bytesToEncrypted(bytes: Uint8Array): ECIESEncrypted {\n  const absoluteMinLength = FORMAT.IV_LENGTH + 1 + MAC.LENGTH + 1;\n  if (bytes.length < absoluteMinLength) {\n    throw new ECIESError(\n      `Invalid ECIES data: too short (${bytes.length} bytes, minimum ${absoluteMinLength} bytes required)`,\n      \"DECRYPTION_FAILED\",\n    );\n  }\n\n  const prefix = bytes[FORMAT.EPHEMERAL_KEY_OFFSET];\n  if (prefix !== CURVE.PREFIX.UNCOMPRESSED) {\n    throw new ECIESError(\n      `Invalid ephemeral public key: must be uncompressed format (0x04 prefix), got 0x${prefix.toString(16).padStart(2, \"0\")}`,\n      \"DECRYPTION_FAILED\",\n    );\n  }\n\n  const ephemKeySize = CURVE.UNCOMPRESSED_PUBLIC_KEY_LENGTH;\n  const minLength = FORMAT.IV_LENGTH + ephemKeySize + MAC.LENGTH + 1;\n  if (bytes.length < minLength) {\n    throw new ECIESError(\n      `Invalid ECIES data: too short (${bytes.length} bytes, minimum ${minLength} bytes required)`,\n      \"DECRYPTION_FAILED\",\n    );\n  }\n\n  return {\n    iv: bytes.subarray(FORMAT.IV_OFFSET, FORMAT.IV_OFFSET + FORMAT.IV_LENGTH),\n    ephemPublicKey: bytes.subarray(\n      FORMAT.EPHEMERAL_KEY_OFFSET,\n      FORMAT.EPHEMERAL_KEY_OFFSET + ephemKeySize,\n    ),\n    ciphertext: bytes.subarray(\n      FORMAT.EPHEMERAL_KEY_OFFSET + ephemKeySize,\n      bytes.length - MAC.LENGTH,\n    ),\n    mac: bytes.subarray(bytes.length - MAC.LENGTH),\n  };\n}\n\nfunction base64ToEncrypted(ciphertext: string) {\n  return deserializeECIES(toHex(fromBase64(ciphertext)));\n}\n\nfunction parseObject(\n  plaintext: Uint8Array,\n  kind: string,\n): Record<string, unknown> {\n  try {\n    const value: unknown = JSON.parse(textDecoder.decode(plaintext));\n    if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n      throw new JobEnvelopeError(`Invalid ${kind}: expected an object`);\n    }\n    return value as Record<string, unknown>;\n  } catch (error) {\n    if (error instanceof JobEnvelopeError) throw error;\n    throw new JobEnvelopeError(`Invalid ${kind}: malformed JSON`);\n  }\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n  if (value === null || typeof value !== \"object\") return false;\n  const prototype = Object.getPrototypeOf(value);\n  return prototype === Object.prototype || prototype === null;\n}\n\nfunction requirePlainObject(\n  value: unknown,\n  field: string,\n  kind: string,\n): asserts value is Record<string, unknown> {\n  if (!isPlainObject(value)) {\n    throw new JobEnvelopeError(`Invalid ${kind}: invalid ${field}`);\n  }\n}\n\nfunction requireExactKeys(\n  value: Record<string, unknown>,\n  expectedKeys: readonly string[],\n  kind: string,\n): void {\n  for (const key of expectedKeys) {\n    if (!Object.hasOwn(value, key) || value[key] === undefined) {\n      throw new JobEnvelopeError(`Invalid ${kind}: missing ${key}`);\n    }\n  }\n  const expected = new Set<PropertyKey>(expectedKeys);\n  for (const key of Reflect.ownKeys(value)) {\n    if (!expected.has(key)) {\n      throw new JobEnvelopeError(\n        `Invalid ${kind}: unknown field ${String(key)}`,\n      );\n    }\n  }\n}\n\nfunction requireString(\n  value: unknown,\n  field: string,\n  kind: string,\n): asserts value is string {\n  if (typeof value !== \"string\" || value.length === 0) {\n    throw new JobEnvelopeError(`Invalid ${kind}: missing ${field}`);\n  }\n}\n\nfunction validateJobRequest(value: unknown): JobRequest {\n  requirePlainObject(value, \"request\", \"job request\");\n  requireExactKeys(\n    value,\n    [\n      \"v\",\n      \"jobId\",\n      \"owner\",\n      \"builder\",\n      \"builderPublicKey\",\n      \"grantId\",\n      \"scope\",\n      \"operation\",\n      \"pinnedVersion\",\n      \"deadline\",\n    ],\n    \"job request\",\n  );\n  if (value.v !== JOB_PROTOCOL_VERSION) {\n    throw new JobEnvelopeError(\n      `Unsupported job request version: ${String(value.v)}`,\n    );\n  }\n  requireString(value.jobId, \"jobId\", \"job request\");\n  if (typeof value.owner !== \"string\" || !isAddress(value.owner)) {\n    throw new JobEnvelopeError(\"Invalid job request: invalid owner\");\n  }\n  if (typeof value.builder !== \"string\" || !isAddress(value.builder)) {\n    throw new JobEnvelopeError(\"Invalid job request: invalid builder\");\n  }\n  if (\n    typeof value.builderPublicKey !== \"string\" ||\n    !isHex(value.builderPublicKey)\n  ) {\n    throw new JobEnvelopeError(\"Invalid job request: invalid builderPublicKey\");\n  }\n  if (typeof value.grantId !== \"string\" || !isHex(value.grantId)) {\n    throw new JobEnvelopeError(\"Invalid job request: invalid grantId\");\n  }\n  requireString(value.scope, \"scope\", \"job request\");\n  if (!JOB_OPERATIONS.includes(value.operation as JobOperation)) {\n    throw new JobEnvelopeError(\"Invalid job request: invalid operation\");\n  }\n  if (value.pinnedVersion !== null && typeof value.pinnedVersion !== \"string\") {\n    throw new JobEnvelopeError(\"Invalid job request: missing pinnedVersion\");\n  }\n  if (\n    typeof value.deadline !== \"string\" ||\n    !Number.isFinite(Date.parse(value.deadline))\n  ) {\n    throw new JobEnvelopeError(\"Invalid job request: invalid deadline\");\n  }\n  return value as unknown as JobRequest;\n}\n\nfunction validateRequestEnvelope(value: unknown): JobRequestEnvelope {\n  requirePlainObject(value, \"envelope\", \"job request envelope\");\n  requireExactKeys(value, [\"request\", \"auth\"], \"job request envelope\");\n  validateJobRequest(value.request);\n  requireString(value.auth, \"auth\", \"job request envelope\");\n  return value as unknown as JobRequestEnvelope;\n}\n\nfunction validateResultMetadata(value: unknown): JobResultMetadata {\n  requirePlainObject(value, \"metadata\", \"job result\");\n  requireExactKeys(\n    value,\n    [\"v\", \"jobId\", \"scope\", \"version\", \"contentType\"],\n    \"job result\",\n  );\n  if (value.v !== JOB_PROTOCOL_VERSION) {\n    throw new JobEnvelopeError(\n      `Unsupported job result version: ${String(value.v)}`,\n    );\n  }\n  for (const field of [\"jobId\", \"scope\", \"contentType\"]) {\n    requireString(value[field], field, \"job result\");\n  }\n  if (value.version !== null && typeof value.version !== \"string\") {\n    throw new JobEnvelopeError(\"Invalid job result: missing version\");\n  }\n  return value as unknown as JobResultMetadata;\n}\n\nfunction validateResult(value: unknown): JobResult {\n  requirePlainObject(value, \"result\", \"job result\");\n  requireExactKeys(\n    value,\n    [\"v\", \"jobId\", \"scope\", \"version\", \"contentType\", \"body\"],\n    \"job result\",\n  );\n  validateResultMetadata(resultMetadata(value as unknown as JobResult));\n  if (!(value.body instanceof Uint8Array)) {\n    throw new JobEnvelopeError(\"Invalid job result: missing body\");\n  }\n  return value as unknown as JobResult;\n}\n\nfunction webCrypto(): Crypto {\n  if (\n    typeof globalThis.crypto === \"undefined\" ||\n    typeof globalThis.crypto.getRandomValues !== \"function\" ||\n    !globalThis.crypto.subtle\n  ) {\n    throw new JobEnvelopeError(\n      \"Job result streaming requires the Web Crypto API\",\n    );\n  }\n  return globalThis.crypto;\n}\n\nfunction uint32(value: number): Uint8Array {\n  const bytes = new Uint8Array(4);\n  new DataView(bytes.buffer).setUint32(0, value);\n  return bytes;\n}\n\nfunction readUint32(bytes: Uint8Array, offset = 0): number {\n  return new DataView(bytes.buffer, bytes.byteOffset + offset, 4).getUint32(0);\n}\n\nfunction wrappedKeyPlaintext(\n  contentKey: Uint8Array,\n  noncePrefix: Uint8Array,\n  metadataBytes: Uint8Array,\n): Uint8Array {\n  const plaintext = new Uint8Array(\n    WRAPPED_KEY_PLAINTEXT_PREFIX_BYTES + metadataBytes.length,\n  );\n  plaintext.set(contentKey, 0);\n  plaintext.set(noncePrefix, AES_KEY_BYTES);\n  new DataView(plaintext.buffer).setUint32(\n    AES_KEY_BYTES + AES_GCM_NONCE_BYTES,\n    metadataBytes.length,\n  );\n  plaintext.set(metadataBytes, WRAPPED_KEY_PLAINTEXT_PREFIX_BYTES);\n  return plaintext;\n}\n\nfunction parseWrappedKeyPlaintext(plaintext: Uint8Array): {\n  contentKey: Uint8Array;\n  noncePrefix: Uint8Array;\n  metadataBytes: Uint8Array;\n  metadata: JobResultMetadata;\n} {\n  if (plaintext.length < WRAPPED_KEY_PLAINTEXT_PREFIX_BYTES) {\n    throw new JobEnvelopeError(\"Invalid job result: wrapped key is truncated\");\n  }\n  const metadataLength = readUint32(\n    plaintext,\n    AES_KEY_BYTES + AES_GCM_NONCE_BYTES,\n  );\n  if (metadataLength > MAX_JOB_RESULT_HEADER_BYTES) {\n    throw new JobEnvelopeError(\n      `Invalid job result: header exceeds ${MAX_JOB_RESULT_HEADER_BYTES} bytes`,\n    );\n  }\n  if (\n    plaintext.length !==\n    WRAPPED_KEY_PLAINTEXT_PREFIX_BYTES + metadataLength\n  ) {\n    throw new JobEnvelopeError(\n      \"Invalid job result: header length exceeds payload\",\n    );\n  }\n  const metadataBytes = plaintext.slice(WRAPPED_KEY_PLAINTEXT_PREFIX_BYTES);\n  const metadata = validateResultMetadata(\n    parseObject(metadataBytes, \"job result header\"),\n  );\n  return {\n    contentKey: plaintext.slice(0, AES_KEY_BYTES),\n    noncePrefix: plaintext.slice(\n      AES_KEY_BYTES,\n      AES_KEY_BYTES + AES_GCM_NONCE_BYTES,\n    ),\n    metadataBytes,\n    metadata,\n  };\n}\n\nasync function importAesKey(\n  contentKey: Uint8Array,\n  usage: KeyUsage,\n): Promise<CryptoKey> {\n  return webCrypto().subtle.importKey(\n    \"raw\",\n    contentKey as BufferSource,\n    { name: \"AES-GCM\" },\n    false,\n    [usage],\n  );\n}\n\nfunction chunkNonce(noncePrefix: Uint8Array, chunkIndex: number): Uint8Array {\n  if (chunkIndex > MAX_CHUNK_INDEX) {\n    throw new JobEnvelopeError(\"Invalid job result: too many chunks\");\n  }\n  const nonce = noncePrefix.slice();\n  const view = new DataView(nonce.buffer, nonce.byteOffset, nonce.byteLength);\n  view.setUint32(8, view.getUint32(8) ^ chunkIndex);\n  return nonce;\n}\n\nfunction chunkAad(\n  metadataBytes: Uint8Array,\n  chunkIndex: number,\n  final: boolean,\n  plaintextLength: number,\n): Uint8Array {\n  const aad = new Uint8Array(14 + metadataBytes.length);\n  aad[0] = JOB_RESULT_FORMAT_VERSION;\n  aad.set(uint32(metadataBytes.length), 1);\n  aad.set(metadataBytes, 5);\n  aad.set(uint32(chunkIndex), 5 + metadataBytes.length);\n  aad[9 + metadataBytes.length] = final ? FINAL_FRAME_FLAG : 0;\n  aad.set(uint32(plaintextLength), 10 + metadataBytes.length);\n  return aad;\n}\n\nasync function encryptResultChunk(\n  key: CryptoKey,\n  noncePrefix: Uint8Array,\n  metadataBytes: Uint8Array,\n  plaintext: Uint8Array,\n  chunkIndex: number,\n  final: boolean,\n): Promise<Uint8Array> {\n  const encrypted = new Uint8Array(\n    await webCrypto().subtle.encrypt(\n      {\n        name: \"AES-GCM\",\n        iv: chunkNonce(noncePrefix, chunkIndex) as BufferSource,\n        additionalData: chunkAad(\n          metadataBytes,\n          chunkIndex,\n          final,\n          plaintext.length,\n        ) as BufferSource,\n        tagLength: AES_GCM_TAG_BYTES * 8,\n      },\n      key,\n      plaintext as BufferSource,\n    ),\n  );\n  const frame = new Uint8Array(\n    FRAME_LENGTH_BYTES + FRAME_FLAGS_BYTES + encrypted.length,\n  );\n  new DataView(frame.buffer).setUint32(0, encrypted.length);\n  frame[FRAME_LENGTH_BYTES] = final ? FINAL_FRAME_FLAG : 0;\n  frame.set(encrypted, FRAME_LENGTH_BYTES + FRAME_FLAGS_BYTES);\n  return frame;\n}\n\nfunction verifyResultBindings(\n  metadata: JobResultMetadata,\n  expect: JobResultExpectation,\n): void {\n  if (metadata.jobId !== expect.jobId) {\n    throw new JobEnvelopeError(\n      `Job result ID ${metadata.jobId} does not match expected job ID ${expect.jobId}`,\n    );\n  }\n  if (expect.scope !== undefined && metadata.scope !== expect.scope) {\n    throw new JobEnvelopeError(\n      `Job result scope ${metadata.scope} does not match expected scope ${expect.scope}`,\n    );\n  }\n  if (expect.version !== undefined && metadata.version !== expect.version) {\n    throw new JobEnvelopeError(\n      `Job result version ${String(metadata.version)} does not match expected version ${String(expect.version)}`,\n    );\n  }\n}\n\nclass ByteStreamReader {\n  private readonly reader: ReadableStreamDefaultReader<Uint8Array>;\n  private current: Uint8Array | undefined;\n  private offset = 0;\n  private ended = false;\n\n  constructor(stream: ReadableStream<Uint8Array>) {\n    this.reader = stream.getReader();\n  }\n\n  private async ensureBytes(): Promise<boolean> {\n    while (!this.current || this.offset === this.current.length) {\n      if (this.ended) return false;\n      const next = await this.reader.read();\n      if (next.done) {\n        this.ended = true;\n        this.current = undefined;\n        return false;\n      }\n      if (!(next.value instanceof Uint8Array)) {\n        throw new JobEnvelopeError(\n          \"Invalid job result: stream yielded non-byte data\",\n        );\n      }\n      this.current = next.value;\n      this.offset = 0;\n    }\n    return true;\n  }\n\n  async readExactOrNull(length: number): Promise<Uint8Array | null> {\n    if (!(await this.ensureBytes())) return null;\n    const bytes = new Uint8Array(length);\n    let written = 0;\n    while (written < length) {\n      if (!(await this.ensureBytes())) {\n        throw new JobEnvelopeError(\"Invalid job result: truncated payload\");\n      }\n      const available = this.current!.length - this.offset;\n      const count = Math.min(available, length - written);\n      bytes.set(\n        this.current!.subarray(this.offset, this.offset + count),\n        written,\n      );\n      this.offset += count;\n      written += count;\n    }\n    return bytes;\n  }\n\n  async readExact(length: number): Promise<Uint8Array> {\n    const bytes = await this.readExactOrNull(length);\n    if (!bytes) {\n      throw new JobEnvelopeError(\"Invalid job result: truncated payload\");\n    }\n    return bytes;\n  }\n\n  async hasRemaining(): Promise<boolean> {\n    return this.ensureBytes();\n  }\n\n  async cancel(reason?: unknown): Promise<void> {\n    await this.reader.cancel(reason);\n  }\n}\n\nfunction normalizeChunkError(error: unknown): Error {\n  if (error instanceof JobEnvelopeError) return error;\n  return new JobEnvelopeError(\n    `Invalid job result: chunk authentication failed${error instanceof Error ? `: ${error.message}` : \"\"}`,\n  );\n}\n\n/**\n * Encrypts a validated job request envelope for a Personal Server enclave.\n *\n * The PS worker verifies\n * `auth.bodyHash === sha256(canonicalJobRequestBytes(request))`; the Gateway\n * never sees the plaintext.\n *\n * @param envelope - Request and builder Web3Signed authorization to encrypt.\n * @param enclavePublicKey - Public key returned by `GET /v1/identity?owner=`.\n * @param ecies - Injected ECIES implementation.\n * @returns Base64 ciphertext encoded as `iv || ephemPub || ct || mac`.\n * @throws {JobEnvelopeError} If the envelope or request is invalid.\n * @throws If ECIES encryption fails or the enclave public key is invalid.\n *\n * @example\n * ```ts\n * const identity = await fetch(`/v1/identity?owner=${owner}`).then((response) =>\n *   response.json(),\n * );\n * const requestCiphertext = await sealJobRequest(\n *   requestEnvelope,\n *   identity.publicKey,\n *   ecies,\n * );\n * await fetch(\"/v1/jobs\", {\n *   method: \"POST\",\n *   body: JSON.stringify({ ...submission, requestCiphertext }),\n * });\n * ```\n */\nexport async function sealJobRequest(\n  envelope: JobRequestEnvelope,\n  enclavePublicKey: Hex,\n  ecies: ECIESProvider,\n): Promise<string> {\n  const encrypted = await ecies.encrypt(\n    fromHex(enclavePublicKey, \"bytes\"),\n    requestPlaintext(envelope),\n  );\n  return encryptedBytesToBase64(encrypted);\n}\n\n/**\n * Decrypts and validates a job request envelope inside the enclave.\n *\n * @param ciphertext - Base64 `iv || ephemPub || ct || mac` ciphertext.\n * @param privateKey - Enclave key bytes, supplied as `Uint8Array` so the agent can zero them after use.\n * @param ecies - Injected ECIES implementation.\n * @returns The validated request envelope exactly as parsed from plaintext.\n * @throws {JobEnvelopeError} If plaintext is malformed or fails schema validation.\n * @throws If ciphertext decoding or ECIES decryption fails.\n */\nexport async function openJobRequest(\n  ciphertext: string,\n  privateKey: Uint8Array,\n  ecies: ECIESProvider,\n): Promise<JobRequestEnvelope> {\n  const plaintext = await ecies.decrypt(\n    privateKey,\n    base64ToEncrypted(ciphertext),\n  );\n  return validateRequestEnvelope(\n    parseObject(plaintext, \"job request envelope\"),\n  );\n}\n\n/** Create a bounded-memory hybrid sealer for a job result body. */\nexport async function sealJobResultStream(\n  metadataValue: JobResultMetadata,\n  builderPublicKey: Hex,\n  ecies: ECIESProvider,\n): Promise<SealedJobResultStream> {\n  const metadata = validateResultMetadata(metadataValue);\n  const metadataBytes = canonicalJsonBytes(metadata);\n  if (metadataBytes.length > MAX_JOB_RESULT_HEADER_BYTES) {\n    throw new JobEnvelopeError(\n      `Invalid job result: header exceeds ${MAX_JOB_RESULT_HEADER_BYTES} bytes`,\n    );\n  }\n\n  const crypto = webCrypto();\n  const contentKey = crypto.getRandomValues(new Uint8Array(AES_KEY_BYTES));\n  const noncePrefix = crypto.getRandomValues(\n    new Uint8Array(AES_GCM_NONCE_BYTES),\n  );\n  const key = await importAesKey(contentKey, \"encrypt\");\n  const keyPlaintext = wrappedKeyPlaintext(\n    contentKey,\n    noncePrefix,\n    metadataBytes,\n  );\n  const encryptedKey = await ecies.encrypt(\n    fromHex(builderPublicKey, \"bytes\"),\n    keyPlaintext,\n  );\n  contentKey.fill(0);\n  keyPlaintext.fill(0);\n  const wrappedKey = encryptedToBytes(encryptedKey);\n  if (wrappedKey.length > MAX_WRAPPED_KEY_BYTES) {\n    throw new JobEnvelopeError(\"Invalid job result: wrapped key is too large\");\n  }\n  const header = new Uint8Array(\n    1 + WRAPPED_KEY_LENGTH_BYTES + wrappedKey.length,\n  );\n  header[0] = JOB_RESULT_FORMAT_VERSION;\n  new DataView(header.buffer).setUint32(1, wrappedKey.length);\n  header.set(wrappedKey, 1 + WRAPPED_KEY_LENGTH_BYTES);\n\n  let pending = new Uint8Array(JOB_RESULT_CHUNK_BYTES);\n  let pendingLength = 0;\n  let chunkIndex = 0;\n  const transform = new TransformStream<Uint8Array, Uint8Array>({\n    async transform(chunk, controller) {\n      if (!(chunk instanceof Uint8Array)) {\n        throw new JobEnvelopeError(\n          \"Invalid job result: stream yielded non-byte data\",\n        );\n      }\n      let offset = 0;\n      while (offset < chunk.length) {\n        if (pendingLength === JOB_RESULT_CHUNK_BYTES) {\n          controller.enqueue(\n            await encryptResultChunk(\n              key,\n              noncePrefix,\n              metadataBytes,\n              pending,\n              chunkIndex,\n              false,\n            ),\n          );\n          chunkIndex += 1;\n          pending = new Uint8Array(JOB_RESULT_CHUNK_BYTES);\n          pendingLength = 0;\n        }\n        const count = Math.min(\n          chunk.length - offset,\n          JOB_RESULT_CHUNK_BYTES - pendingLength,\n        );\n        pending.set(chunk.subarray(offset, offset + count), pendingLength);\n        pendingLength += count;\n        offset += count;\n      }\n    },\n    async flush(controller) {\n      controller.enqueue(\n        await encryptResultChunk(\n          key,\n          noncePrefix,\n          metadataBytes,\n          pending.subarray(0, pendingLength),\n          chunkIndex,\n          true,\n        ),\n      );\n    },\n  });\n\n  return { header, transform };\n}\n\n/**\n * Encrypts a validated job result for its builder and describes the ciphertext.\n *\n * This compatibility wrapper drives {@link sealJobResultStream} and allocates\n * the final sealed byte array once. `hash` and `size` retain their Gateway\n * object-storage semantics.\n */\nexport async function sealJobResult(\n  result: JobResult,\n  builderPublicKey: Hex,\n  ecies: ECIESProvider,\n): Promise<{ bytes: Uint8Array; hash: Hex; size: number }> {\n  validateResult(result);\n  const sealed = await sealJobResultStream(\n    resultMetadata(result),\n    builderPublicKey,\n    ecies,\n  );\n  const frameCount = Math.max(\n    1,\n    Math.ceil(result.body.length / JOB_RESULT_CHUNK_BYTES),\n  );\n  const size =\n    sealed.header.length +\n    result.body.length +\n    frameCount * (FRAME_LENGTH_BYTES + FRAME_FLAGS_BYTES + AES_GCM_TAG_BYTES);\n  const bytes = new Uint8Array(size);\n  bytes.set(sealed.header, 0);\n  let outputOffset = sealed.header.length;\n  const reader = sealed.transform.readable.getReader();\n  const drain = (async () => {\n    for (;;) {\n      const next = await reader.read();\n      if (next.done) break;\n      bytes.set(next.value, outputOffset);\n      outputOffset += next.value.length;\n    }\n  })();\n  const writer = sealed.transform.writable.getWriter();\n  const fill = (async () => {\n    for (\n      let offset = 0;\n      offset < result.body.length;\n      offset += JOB_RESULT_CHUNK_BYTES\n    ) {\n      await writer.write(\n        result.body.subarray(offset, offset + JOB_RESULT_CHUNK_BYTES),\n      );\n    }\n    await writer.close();\n  })();\n  await Promise.all([drain, fill]);\n  if (outputOffset !== bytes.length) {\n    throw new JobEnvelopeError(\"Invalid job result: sealed size mismatch\");\n  }\n  return { bytes, hash: bytesToHex(sha256(bytes)), size };\n}\n\n/** Open and authenticate a hybrid job result without buffering its body. */\nexport async function openJobResultStream(\n  bytesStream: ReadableStream<Uint8Array>,\n  builderPrivateKey: Hex,\n  ecies: ECIESProvider,\n  expect: JobResultExpectation,\n): Promise<OpenedJobResultStream> {\n  const reader = new ByteStreamReader(bytesStream);\n  const headerPrefix = await reader.readExact(1 + WRAPPED_KEY_LENGTH_BYTES);\n  const formatVersion = headerPrefix[0];\n  if (formatVersion !== JOB_RESULT_FORMAT_VERSION) {\n    throw new JobEnvelopeError(\n      `Unsupported job result format: ${String(formatVersion)}`,\n    );\n  }\n  const wrappedKeyLength = readUint32(headerPrefix, 1);\n  if (wrappedKeyLength === 0 || wrappedKeyLength > MAX_WRAPPED_KEY_BYTES) {\n    throw new JobEnvelopeError(\n      \"Invalid job result: invalid wrapped key length\",\n    );\n  }\n  const wrappedKey = await reader.readExact(wrappedKeyLength);\n  const keyPlaintext = await ecies.decrypt(\n    fromHex(builderPrivateKey, \"bytes\"),\n    bytesToEncrypted(wrappedKey),\n  );\n  const parsed = parseWrappedKeyPlaintext(keyPlaintext);\n  verifyResultBindings(parsed.metadata, expect);\n  const key = await importAesKey(parsed.contentKey, \"decrypt\");\n  parsed.contentKey.fill(0);\n  keyPlaintext.fill(0);\n\n  let chunkIndex = 0;\n  let finished = false;\n  const body = new ReadableStream<Uint8Array>({\n    async pull(controller) {\n      if (finished) {\n        controller.close();\n        return;\n      }\n      try {\n        const frameHeader = await reader.readExactOrNull(\n          FRAME_LENGTH_BYTES + FRAME_FLAGS_BYTES,\n        );\n        if (!frameHeader) {\n          throw new JobEnvelopeError(\"Invalid job result: missing final chunk\");\n        }\n        const encryptedLength = readUint32(frameHeader);\n        if (\n          encryptedLength < AES_GCM_TAG_BYTES ||\n          encryptedLength > JOB_RESULT_CHUNK_BYTES + AES_GCM_TAG_BYTES\n        ) {\n          throw new JobEnvelopeError(\n            \"Invalid job result: invalid chunk length\",\n          );\n        }\n        const flags = frameHeader[FRAME_LENGTH_BYTES];\n        if (flags !== 0 && flags !== FINAL_FRAME_FLAG) {\n          throw new JobEnvelopeError(\"Invalid job result: invalid chunk flags\");\n        }\n        const final = flags === FINAL_FRAME_FLAG;\n        const plaintextLength = encryptedLength - AES_GCM_TAG_BYTES;\n        if (!final && plaintextLength !== JOB_RESULT_CHUNK_BYTES) {\n          throw new JobEnvelopeError(\n            \"Invalid job result: short non-final chunk\",\n          );\n        }\n        const encrypted = await reader.readExact(encryptedLength);\n        const plaintext = new Uint8Array(\n          await webCrypto().subtle.decrypt(\n            {\n              name: \"AES-GCM\",\n              iv: chunkNonce(parsed.noncePrefix, chunkIndex) as BufferSource,\n              additionalData: chunkAad(\n                parsed.metadataBytes,\n                chunkIndex,\n                final,\n                plaintextLength,\n              ) as BufferSource,\n              tagLength: AES_GCM_TAG_BYTES * 8,\n            },\n            key,\n            encrypted as BufferSource,\n          ),\n        );\n        if (plaintext.length !== plaintextLength) {\n          throw new JobEnvelopeError(\n            \"Invalid job result: decrypted chunk length mismatch\",\n          );\n        }\n        chunkIndex += 1;\n        if (final) {\n          if (await reader.hasRemaining()) {\n            throw new JobEnvelopeError(\n              \"Invalid job result: bytes follow final chunk\",\n            );\n          }\n          finished = true;\n        }\n        controller.enqueue(plaintext);\n        if (finished) controller.close();\n      } catch (error) {\n        controller.error(normalizeChunkError(error));\n        void reader.cancel(error).catch(() => undefined);\n      }\n    },\n    cancel(reason) {\n      return reader.cancel(reason);\n    },\n  });\n\n  return { metadata: parsed.metadata, body };\n}\n\nfunction bufferedResultBodySize(sealedBytes: Uint8Array): number {\n  if (sealedBytes.length < 1 + WRAPPED_KEY_LENGTH_BYTES) {\n    throw new JobEnvelopeError(\"Invalid job result: truncated payload\");\n  }\n  if (sealedBytes[0] !== JOB_RESULT_FORMAT_VERSION) {\n    throw new JobEnvelopeError(\n      `Unsupported job result format: ${String(sealedBytes[0])}`,\n    );\n  }\n  const wrappedKeyLength = readUint32(sealedBytes, 1);\n  if (wrappedKeyLength === 0 || wrappedKeyLength > MAX_WRAPPED_KEY_BYTES) {\n    throw new JobEnvelopeError(\n      \"Invalid job result: invalid wrapped key length\",\n    );\n  }\n  let offset = 1 + WRAPPED_KEY_LENGTH_BYTES + wrappedKeyLength;\n  if (offset > sealedBytes.length) {\n    throw new JobEnvelopeError(\"Invalid job result: truncated payload\");\n  }\n  let bodySize = 0;\n  let sawFinal = false;\n  while (offset < sealedBytes.length) {\n    if (sealedBytes.length - offset < FRAME_LENGTH_BYTES + FRAME_FLAGS_BYTES) {\n      throw new JobEnvelopeError(\"Invalid job result: truncated payload\");\n    }\n    const encryptedLength = readUint32(sealedBytes, offset);\n    const flags = sealedBytes[offset + FRAME_LENGTH_BYTES];\n    if (\n      encryptedLength < AES_GCM_TAG_BYTES ||\n      encryptedLength > JOB_RESULT_CHUNK_BYTES + AES_GCM_TAG_BYTES ||\n      (flags !== 0 && flags !== FINAL_FRAME_FLAG)\n    ) {\n      throw new JobEnvelopeError(\"Invalid job result: invalid chunk framing\");\n    }\n    const plaintextLength = encryptedLength - AES_GCM_TAG_BYTES;\n    if (flags === 0 && plaintextLength !== JOB_RESULT_CHUNK_BYTES) {\n      throw new JobEnvelopeError(\"Invalid job result: short non-final chunk\");\n    }\n    offset += FRAME_LENGTH_BYTES + FRAME_FLAGS_BYTES;\n    if (encryptedLength > sealedBytes.length - offset) {\n      throw new JobEnvelopeError(\"Invalid job result: truncated payload\");\n    }\n    offset += encryptedLength;\n    bodySize += plaintextLength;\n    if (flags === FINAL_FRAME_FLAG) {\n      sawFinal = true;\n      if (offset !== sealedBytes.length) {\n        throw new JobEnvelopeError(\n          \"Invalid job result: bytes follow final chunk\",\n        );\n      }\n    }\n  }\n  if (!sawFinal) {\n    throw new JobEnvelopeError(\"Invalid job result: missing final chunk\");\n  }\n  return bodySize;\n}\n\n/**\n * Decrypts a job result and verifies its builder-visible protocol bindings.\n *\n * The builder private key is a `Hex` wallet key. For `expect.version`,\n * `undefined` skips the check while `null` requires a null result version.\n *\n * @param sealedBytes - Raw hybrid sealed-result bytes.\n * @param builderPrivateKey - Builder's wallet private key as hex.\n * @param ecies - Injected ECIES implementation.\n * @param expect - Required job ID and optional scope and version bindings.\n * @returns The validated result when every supplied binding matches.\n * @throws {JobEnvelopeError} If plaintext is malformed, invalid, or a binding differs.\n * @throws If ciphertext decoding or ECIES decryption fails.\n *\n * @example\n * ```ts\n * const sealedBytes = new Uint8Array(await response.arrayBuffer());\n * const result = await openJobResult(sealedBytes, key, ecies, {\n *   jobId,\n *   scope,\n * });\n * const text = new TextDecoder().decode(result.body);\n * ```\n */\nexport async function openJobResult(\n  sealedBytes: Uint8Array,\n  builderPrivateKey: Hex,\n  ecies: ECIESProvider,\n  expect: JobResultExpectation,\n): Promise<JobResult> {\n  const bodySize = bufferedResultBodySize(sealedBytes);\n  const stream = new ReadableStream<Uint8Array>({\n    start(controller) {\n      controller.enqueue(sealedBytes);\n      controller.close();\n    },\n  });\n  const opened = await openJobResultStream(\n    stream,\n    builderPrivateKey,\n    ecies,\n    expect,\n  );\n  const body = new Uint8Array(bodySize);\n  let offset = 0;\n  await opened.body.pipeTo(\n    new WritableStream({\n      write(chunk) {\n        body.set(chunk, offset);\n        offset += chunk.length;\n      },\n    }),\n  );\n  if (offset !== body.length) {\n    throw new JobEnvelopeError(\"Invalid job result: opened size mismatch\");\n  }\n  return { ...opened.metadata, body };\n}\n", "// SOURCE CONFIGURATION - Complete contract registry\n// Generated output: src/generated/addresses.ts\n\n/**\n * Complete contract configuration for the Vana protocol.\n *\n * \u26A0\uFE0F THIS IS A SOURCE FILE - EDIT THIS TO ADD/UPDATE CONTRACTS\n *\n * @remarks\n * This file contains all contract addresses and discovery metadata in one place.\n *\n * **Contract Types:**\n * - Entry Points: Contracts without `discovery` field (must be known externally)\n * - Discoverable: Contracts with `discovery` field (auto-discovered from parent)\n *\n * **Build Process:**\n * 1. Edit this file to add/update contracts\n * 2. Run `npm run discover-addresses` to validate and generate complete registry\n * 3. Run `npm run fetch-abis` to fetch ABIs for all contracts\n *\n * @category Configuration\n * @internal This is a source file - apps should import from src/generated/addresses.ts\n */\n\ninterface DiscoveryMetadata {\n  /** Parent contract to discover this from */\n  parent: string;\n  /** Getter function name on parent contract */\n  getter: string;\n}\n\ninterface ContractConfig {\n  addresses: {\n    14800: string;\n    1480: string;\n  };\n  /** If present, this contract can be auto-discovered from parent */\n  discovery?: DiscoveryMetadata;\n}\n\nexport const CONTRACTS: Record<string, ContractConfig> = {\n  // ========================================\n  // DATA PORTABILITY CONTRACTS\n  // ========================================\n  DataPortabilityEscrow: {\n    addresses: {\n      14800: \"0x07d7769081adc3a3DBe91f5E4B98E9A5a6B292e3\",\n      1480: \"0x07d7769081adc3a3DBe91f5E4B98E9A5a6B292e3\",\n    },\n  },\n  FeeRegistry: {\n    addresses: {\n      14800: \"0xb4FA18443E0FA6cdC0280D20b8cCDB2377D13Bf2\",\n      1480: \"0xb4FA18443E0FA6cdC0280D20b8cCDB2377D13Bf2\",\n    },\n  },\n  // V2 deployment (DataPortabilityPermissionsV2Proxy). The gateway is the source\n  // of truth for which deployment is live; verify with\n  // `cast call <address> \"eip712Domain()(bytes1,string,string,uint256,address,bytes32,uint256[])\"`\n  // which must return the domain name \"Vana Data Portability\".\n  DataPortabilityPermissions: {\n    addresses: {\n      14800: \"0x4d3FA76064D88e0454cFc4CaD7e5FeC3e3124011\",\n      1480: \"0x4d3FA76064D88e0454cFc4CaD7e5FeC3e3124011\",\n    },\n  },\n  // V2 deployment (DataPortabilityServersV2Proxy) on both chains.\n  DataPortabilityServers: {\n    addresses: {\n      14800: \"0xCae2CE0e9caa6643ed28186cF57bd40Bd9E17Eab\",\n      1480: \"0xCae2CE0e9caa6643ed28186cF57bd40Bd9E17Eab\",\n    },\n  },\n  DataPortabilityGrantees: {\n    addresses: {\n      14800: \"0x8325C0A0948483EdA023A1A2Fd895e62C5131234\",\n      1480: \"0x8325C0A0948483EdA023A1A2Fd895e62C5131234\",\n    },\n  },\n  DataRegistry: {\n    addresses: {\n      14800: \"0x8C8788f98385F6ba1adD4234e551ABba0f82Cb7C\",\n      1480: \"0x8C8788f98385F6ba1adD4234e551ABba0f82Cb7C\",\n    },\n  },\n\n  // ========================================\n  // COMPUTING INFRASTRUCTURE\n  // ========================================\n  ComputeEngine: {\n    addresses: {\n      14800: \"0xb2BFe33FA420c45F1Cf1287542ad81ae935447bd\",\n      1480: \"0xb2BFe33FA420c45F1Cf1287542ad81ae935447bd\",\n    },\n  },\n  ComputeEngineTreasury: {\n    addresses: {\n      14800: \"0xceB33C501B624D984bD1Ed3298f6D1d8F7CE03d1\",\n      1480: \"0xceB33C501B624D984bD1Ed3298f6D1d8F7CE03d1\",\n    },\n    discovery: {\n      parent: \"ComputeEngine\",\n      getter: \"computeEngineTreasury\",\n    },\n  },\n  QueryEngine: {\n    addresses: {\n      14800: \"0xd25Eb66EA2452cf3238A2eC6C1FD1B7F5B320490\",\n      1480: \"0xd25Eb66EA2452cf3238A2eC6C1FD1B7F5B320490\",\n    },\n  },\n  VanaTreasury: {\n    addresses: {\n      14800: \"0x8B32Ef32f22e72cc25D53f6E858f57cAe7E198f9\",\n      1480: \"0x8B32Ef32f22e72cc25D53f6E858f57cAe7E198f9\",\n    },\n    discovery: {\n      parent: \"QueryEngine\",\n      getter: \"queryEngineTreasury\",\n    },\n  },\n  DataRefinerRegistry: {\n    addresses: {\n      14800: \"0x93c3EF89369fDcf08Be159D9DeF0F18AB6Be008c\",\n      1480: \"0x93c3EF89369fDcf08Be159D9DeF0F18AB6Be008c\",\n    },\n  },\n  ComputeInstructionRegistry: {\n    addresses: {\n      14800: \"0x5786B12b4c6Ba2bFAF0e77Ed30Bf6d32805563A5\",\n      1480: \"0x5786B12b4c6Ba2bFAF0e77Ed30Bf6d32805563A5\",\n    },\n  },\n\n  // ========================================\n  // TEE POOLS (Canonical Deployments)\n  // ========================================\n  TeePoolPhala: {\n    addresses: {\n      14800: \"0xE8EC6BD73b23Ad40E6B9a6f4bD343FAc411bD99A\",\n      1480: \"0xE8EC6BD73b23Ad40E6B9a6f4bD343FAc411bD99A\",\n    },\n  },\n  TeePoolEphemeralStandard: {\n    addresses: {\n      14800: \"0xe124bae846D5ec157f75Bd9e68ca87C4d2AB835A\",\n      1480: \"0xe124bae846D5ec157f75Bd9e68ca87C4d2AB835A\",\n    },\n  },\n  TeePoolPersistentStandard: {\n    addresses: {\n      14800: \"0xe8bB8d0629651Cf33e0845d743976Dc1f0971d76\",\n      1480: \"0xe8bB8d0629651Cf33e0845d743976Dc1f0971d76\",\n    },\n  },\n  TeePoolPersistentGpu: {\n    addresses: {\n      14800: \"0x1c346Cd74f8551f8fa13f3F4b6b8dAE22338E6a9\",\n      1480: \"0x1c346Cd74f8551f8fa13f3F4b6b8dAE22338E6a9\",\n    },\n  },\n  TeePoolDedicatedStandard: {\n    addresses: {\n      14800: \"0xf024b7ac5E8417416f53B41ecfa58C8e9396687d\",\n      1480: \"0xf024b7ac5E8417416f53B41ecfa58C8e9396687d\",\n    },\n  },\n  TeePoolDedicatedGpu: {\n    addresses: {\n      14800: \"0xB1686FA9620bBf851714d1cB47b8a4Bf4664644E\",\n      1480: \"0xB1686FA9620bBf851714d1cB47b8a4Bf4664644E\",\n    },\n  },\n\n  // ========================================\n  // VANA EPOCH / DLP REGISTRY\n  // ========================================\n  // Note: DLP rewards-specific contracts (DLPPerformance, DLPRewardDeployer,\n  // DLPRewardDeployerTreasury, DLPRewardSwap, SwapHelper) were removed in the\n  // protocol unification cleanup. VanaEpoch, DLPRegistry, and DLPRegistryTreasury\n  // are kept because they may be referenced beyond the rewards system.\n  VanaEpoch: {\n    addresses: {\n      14800: \"0x2063cFF0609D59bCCc196E20Eb58A8696a6b15A0\",\n      1480: \"0x2063cFF0609D59bCCc196E20Eb58A8696a6b15A0\",\n    },\n  },\n  DLPRegistry: {\n    addresses: {\n      14800: \"0x4D59880a924526d1dD33260552Ff4328b1E18a43\",\n      1480: \"0x4D59880a924526d1dD33260552Ff4328b1E18a43\",\n    },\n  },\n  DLPRegistryTreasury: {\n    addresses: {\n      14800: \"0xb12ce1d27bEeFe39b6F0110b1AB77C21Aa0c9F9a\",\n      1480: \"0xb12ce1d27bEeFe39b6F0110b1AB77C21Aa0c9F9a\",\n    },\n    discovery: {\n      parent: \"DLPRegistry\",\n      getter: \"treasury\",\n    },\n  },\n\n  // ========================================\n  // VANA POOL (STAKING)\n  // ========================================\n  VanaPoolStaking: {\n    addresses: {\n      14800: \"0x641C18E2F286c86f96CE95C8ec1EB9fC0415Ca0e\",\n      1480: \"0x641C18E2F286c86f96CE95C8ec1EB9fC0415Ca0e\",\n    },\n  },\n  VanaPoolTreasury: {\n    addresses: {\n      14800: \"0x143BE72CF2541604A7691933CAccd6D9cC17c003\",\n      1480: \"0x143BE72CF2541604A7691933CAccd6D9cC17c003\",\n    },\n    discovery: {\n      parent: \"VanaPoolStaking\",\n      getter: \"vanaPoolTreasury\",\n    },\n  },\n  VanaPoolEntity: {\n    addresses: {\n      14800: \"0x44f20490A82e1f1F1cC25Dd3BA8647034eDdce30\",\n      1480: \"0x44f20490A82e1f1F1cC25Dd3BA8647034eDdce30\",\n    },\n    discovery: {\n      parent: \"VanaPoolStaking\",\n      getter: \"vanaPoolEntity\",\n    },\n  },\n\n  // ========================================\n  // DLP DEPLOYMENT & TOKEN SYSTEM\n  // ========================================\n  DATFactory: {\n    addresses: {\n      14800: \"0x40f8bccF35a75ecef63BC3B1B3E06ffEB9220644\",\n      1480: \"0x40f8bccF35a75ecef63BC3B1B3E06ffEB9220644\",\n    },\n  },\n  DAT: {\n    addresses: {\n      14800: \"0xA706b93ccED89f13340673889e29F0a5cd84212d\",\n      1480: \"0xA706b93ccED89f13340673889e29F0a5cd84212d\",\n    },\n  },\n  DATPausable: {\n    addresses: {\n      14800: \"0xe69FE86f0B95cC2f8416Fe22815c85DC8887e76e\",\n      1480: \"0xe69FE86f0B95cC2f8416Fe22815c85DC8887e76e\",\n    },\n  },\n  DATVotes: {\n    addresses: {\n      14800: \"0xaE04c8A77E9B27869eb563720524A9aE0baf1831\",\n      1480: \"0xaE04c8A77E9B27869eb563720524A9aE0baf1831\",\n    },\n  },\n\n  // ========================================\n  // EXTERNAL DEPENDENCIES (DeFi)\n  // ========================================\n  WVANA: {\n    addresses: {\n      14800: \"0xbccc4b4c6530F82FE309c5E845E50b5E9C89f2AD\",\n      1480: \"0x00EDdD9621Fb08436d0331c149D1690909a5906d\",\n    },\n  },\n  UniswapV3NonfungiblePositionManager: {\n    addresses: {\n      14800: \"0x48Bd633f4B9128a38Ebb4a48b6975EB3Eaf1931b\",\n      1480: \"0x45a2992e1bFdCF9b9AcE0a84A238f2E56F481816\",\n    },\n  },\n  UniswapV3QuoterV2: {\n    addresses: {\n      14800: \"0x3152246f3CD4dD465292Dd4Ffd792E2Cf602e332\",\n      1480: \"0x1b13728ea3C90863990aC0e05987CfeC1888908c\",\n    },\n  },\n\n  // ========================================\n  // UTILITY CONTRACTS\n  // ========================================\n  Multicall3: {\n    addresses: {\n      14800: \"0xD8d2dFca27E8797fd779F8547166A2d3B29d360E\",\n      1480: \"0xD8d2dFca27E8797fd779F8547166A2d3B29d360E\",\n    },\n  },\n  Multisend: {\n    addresses: {\n      14800: \"0x8807e8BCDFbaA8c2761760f3FBA37F6f7F2C5b2d\",\n      1480: \"0x8807e8BCDFbaA8c2761760f3FBA37F6f7F2C5b2d\",\n    },\n  },\n} as const;\n\n// Legacy DLPRoot* and deprecated TeePool entries were removed in the protocol\n// unification cleanup. They were part of the old DLP rewards system superseded\n// by other contracts.\n", "/**\n * DPv2 escrow payment helpers.\n *\n * Covers the three-phase flow used by builders to pay for data access:\n *\n *  1. **Deposit** \u2014 call `depositNative` or `depositToken` on the\n *     DataPortabilityEscrow contract, then notify the gateway.\n *  2. **Balance** \u2014 read or force-sync the gateway's off-chain credit view.\n *  3. **Pay** \u2014 sign a `GenericPayment` EIP-712 message and POST it to the\n *     gateway's `/v1/escrow/pay` endpoint.\n *\n * The gateway is the authority on balances; the on-chain contract is the\n * authority on what has been settled. Nothing in this module touches the\n * chain directly \u2014 signing is done by the caller's wallet.\n *\n * @category Protocol\n * @module escrow\n */\n\nexport {\n  buildWithdrawAuthorizationTypedData,\n  withdrawAuthorizationDomain,\n  WITHDRAW_AUTHORIZATION_TYPES,\n  type WithdrawAuthorizationMessage,\n} from \"./eip712\";\nimport type { TypedDataDomain } from \"viem\";\nimport { isHex } from \"viem\";\n\n// ---------------------------------------------------------------------------\n// EIP-712 \u2014 GenericPayment\n// ---------------------------------------------------------------------------\n\n/**\n * EIP-712 typed-data types for a generic op payment.\n *\n * The gateway verifies that the recovered signer == `payerAddress` and that\n * the (payer, paymentNonce) pair has not been seen before. Use a\n * monotonically-increasing nonce; the first payment for any payer should\n * start at 1.\n */\nexport const GENERIC_PAYMENT_TYPES = {\n  GenericPayment: [\n    { name: \"payerAddress\", type: \"address\" },\n    { name: \"opType\", type: \"string\" },\n    { name: \"opId\", type: \"bytes32\" },\n    { name: \"asset\", type: \"address\" },\n    { name: \"amount\", type: \"uint256\" },\n    { name: \"paymentNonce\", type: \"uint256\" },\n  ],\n} as const;\n\n/**\n * EIP-712 message payload for a generic op payment.\n *\n * - `opType` is `\"grant\"` for legacy grant lifecycle payments or\n *   `\"data_access\"` for a standalone receipt-bound read.\n * - `opId` is the bytes32 id of the operation being paid for: the grant id for\n *   `\"grant\"`, or `accessRecord.recordId` for `\"data_access\"`.\n * - `asset` is the ERC-20 token address, or the zero address for native VANA.\n * - `amount` is the total amount in base units (wei for VANA). Must match the\n *   sum the gateway expects for the current lifecycle of the op.\n * - `paymentNonce` must be a positive integer unique per `payerAddress`. Use 1\n *   for the first payment; increment by at least 1 for each subsequent call.\n */\nexport interface GenericPaymentMessage {\n  payerAddress: `0x${string}`;\n  opType: string;\n  opId: `0x${string}`;\n  asset: `0x${string}`;\n  amount: bigint;\n  paymentNonce: bigint;\n}\n\n/**\n * Returns the EIP-712 domain for signing a `GenericPayment` message.\n *\n * The verifying contract is the `DataPortabilityEscrow` contract; all gateway\n * deployments share the same domain name and version.\n *\n * @param chainId - Chain ID of the Vana network (e.g. 1480 mainnet, 14800 testnet).\n * @param escrowContract - Deployed address of DataPortabilityEscrow.\n */\nexport function genericPaymentDomain(\n  chainId: number,\n  escrowContract: `0x${string}`,\n): TypedDataDomain {\n  return {\n    name: \"Vana Data Portability\",\n    version: \"1\",\n    chainId,\n    verifyingContract: escrowContract,\n  };\n}\n\n// ---------------------------------------------------------------------------\n// On-chain deposit ABI fragments\n// ---------------------------------------------------------------------------\n\n/**\n * Minimal ABI for the two deposit entry points on `DataPortabilityEscrow`.\n *\n * - `depositNative(address account)` payable \u2014 credits native VANA.\n * - `depositToken(address account, address token, uint256 amount)` \u2014 credits\n *   an ERC-20 token (caller must have pre-approved the escrow contract).\n *\n * Pass this to viem's `writeContract` or encode it manually.\n */\nexport const ESCROW_DEPOSIT_ABI = [\n  {\n    type: \"function\",\n    name: \"depositNative\",\n    stateMutability: \"payable\",\n    inputs: [{ name: \"account\", type: \"address\" }],\n    outputs: [],\n  },\n  {\n    type: \"function\",\n    name: \"depositToken\",\n    stateMutability: \"nonpayable\",\n    inputs: [\n      { name: \"account\", type: \"address\" },\n      { name: \"token\", type: \"address\" },\n      { name: \"amount\", type: \"uint256\" },\n    ],\n    outputs: [],\n  },\n] as const;\n\n/**\n * The zero address used by the DataPortabilityEscrow contract to represent\n * native VANA in `asset` fields of events and balance responses.\n */\nexport const NATIVE_ASSET_ADDRESS =\n  \"0x0000000000000000000000000000000000000000\" as const;\n\n// ---------------------------------------------------------------------------\n// Gateway API client\n// ---------------------------------------------------------------------------\n\n/**\n * Per-asset balance entry returned by the gateway's escrow balance endpoints.\n *\n * - `balance` \u2014 gross finalized credit (deposits credited so far).\n * - `pendingAmount` \u2014 sum of submitted deposits not yet confirmed.\n * - `authorizedAmount` \u2014 sum of all in-flight payments authorized by\n *   `/v1/escrow/pay` (soft-lock). May include payments not yet settled\n *   on-chain.\n * - `withdrawingAmount` \u2014 sum of in-flight withdrawal reservations.\n * - `availableAmount` \u2014 `max(balance \u2212 authorizedAmount \u2212 withdrawingAmount, 0)`.\n *   This is what the account can still authorize or withdraw.\n */\nexport interface EscrowBalanceEntry {\n  asset: string;\n  balance: string;\n  pendingAmount: string;\n  authorizedAmount: string;\n  withdrawingAmount: string;\n  availableAmount: string;\n  /** Minimum withdrawal amount currently accepted for this asset, if configured. */\n  withdrawalMinimumAmount: string | null;\n  updatedAt: string | null;\n}\n\nexport interface SubmittedDepositEntry {\n  txHash: string;\n  submittedAt: string;\n  claimedAsset: string;\n  claimedAmount: string;\n}\n\nexport interface FinalizedDepositEntry {\n  txHash: string;\n  finalizedAt: string | null;\n  blockNumber: string | null;\n  claimedAsset: string;\n  claimedAmount: string;\n}\n\nexport interface FailedDepositEntry {\n  txHash: string;\n  submittedAt: string;\n  claimedAsset: string;\n  claimedAmount: string;\n  lastError: string | null;\n}\n\n/** Full balance read response from `GET /v1/escrow/balance`. */\nexport interface EscrowBalanceResult {\n  account: string;\n  balances: EscrowBalanceEntry[];\n  deposits: {\n    submitted: SubmittedDepositEntry[];\n    finalized: FinalizedDepositEntry[];\n    failed: FailedDepositEntry[];\n  };\n}\n\n/**\n * Response from `POST /v1/escrow/balance/sync`.\n *\n * Extends {@link EscrowBalanceResult} with a `sync` summary of what the\n * lazy-confirmation pass did.\n */\nexport interface EscrowBalanceSyncResult extends EscrowBalanceResult {\n  sync:\n    | {\n        scanned: number;\n        finalized: number;\n        stillPending: number;\n        failed: number;\n      }\n    | { skipped: true };\n}\n\n/** Response from `POST /v1/escrow/deposit`. */\nexport interface DepositSubmissionResult {\n  success: true;\n  txHash: string;\n  account: string;\n  status: \"submitted\" | \"finalized\" | \"failed\";\n  blockNumber?: string | null;\n  submittedAt: string;\n  finalizedAt?: string | null;\n  lastError?: string | null;\n}\n\n/** Breakdown returned by a successful `POST /v1/escrow/pay`. */\nexport interface PaymentBreakdown {\n  registrationFee: string;\n  dataAccessFee: string;\n  /** True when this call settled the registration fee for the op. */\n  registrationPaid: boolean;\n}\n\n/** Response from `POST /v1/escrow/pay`. */\nexport interface EscrowPayResult {\n  success: true;\n  opType: string;\n  opId: string;\n  payerAddress: string;\n  asset: string;\n  amount: string;\n  breakdown: PaymentBreakdown;\n  paymentNonce: string;\n  paidAt: string;\n}\n\ninterface EscrowWithdrawalResponseBase {\n  account: `0x${string}`;\n  asset: `0x${string}`;\n  amount: string;\n  withdrawNonce: string;\n  deadline: string;\n}\n\n/** A persisted authorization whose transaction has not been broadcast yet. */\nexport interface EscrowWithdrawalSubmittedWithoutTransaction extends EscrowWithdrawalResponseBase {\n  success: true;\n  status: \"submitted\";\n  txHash: null;\n  message: string;\n}\n\n/** A withdrawal with a persisted transaction that is awaiting reconciliation. */\nexport interface EscrowWithdrawalSubmittedWithTransaction {\n  success: true;\n  status: \"submitted\";\n  txHash: `0x${string}`;\n  message: string;\n  // A provisional-revert response contains only txHash, blockNumber, and\n  // message. Ordinary submissions include the signed-intent fields.\n  account?: `0x${string}`;\n  asset?: `0x${string}`;\n  amount?: string;\n  withdrawNonce?: string;\n  deadline?: string;\n  blockNumber?: string;\n}\n\n/** A withdrawal that the gateway has accepted but not yet confirmed. */\nexport type EscrowWithdrawalSubmittedResult =\n  | EscrowWithdrawalSubmittedWithoutTransaction\n  | EscrowWithdrawalSubmittedWithTransaction;\n\n/** A withdrawal whose on-chain debit has reached the named lifecycle state. */\nexport interface EscrowWithdrawalSettledResult extends EscrowWithdrawalResponseBase {\n  success: true;\n  status: \"confirmed\" | \"finalized\";\n  txHash: `0x${string}`;\n  blockNumber: string | null;\n}\n\n/** Successful lifecycle responses from `POST /v1/escrow/withdraw`. */\nexport type EscrowWithdrawalResult =\n  | EscrowWithdrawalSubmittedResult\n  | EscrowWithdrawalSettledResult;\n\n/** Terminal or retryable withdrawal lifecycle state returned with a non-2xx status. */\nexport interface EscrowWithdrawalFailureResult extends EscrowWithdrawalResponseBase {\n  success: false;\n  status: \"retryable\" | \"reorged\" | \"failed\";\n  error: string;\n  txHash: `0x${string}` | null;\n  blockNumber?: string | null;\n}\n\nexport type EscrowWithdrawalRejectionCode =\n  | \"below_minimum\"\n  | \"deadline_too_far\"\n  | \"expired\"\n  | \"insufficient_available\"\n  | \"stale_nonce\";\n\n/** Definite pre-acceptance rejection. No durable withdrawal intent was created. */\nexport interface EscrowWithdrawalRejectedResult extends EscrowWithdrawalResponseBase {\n  success: false;\n  status: \"rejected\";\n  code: EscrowWithdrawalRejectionCode;\n  error: string;\n  balance?: string;\n  authorizedAmount?: string;\n  withdrawingAmount?: string;\n  availableAmount?: string;\n  requestedAmount?: string;\n  minimumAmount?: string;\n}\n\n/**\n * A typed non-2xx gateway lifecycle response.\n *\n * `retryable` means resend the exact signed intent. `reorged` and `failed`\n * require a newly signed authorization with a new nonce.\n */\nexport class EscrowWithdrawalLifecycleError extends Error {\n  override readonly name = \"EscrowWithdrawalLifecycleError\";\n\n  constructor(\n    readonly httpStatus: number,\n    readonly result: EscrowWithdrawalFailureResult,\n  ) {\n    super(result.error);\n  }\n}\n\n/** A typed non-2xx gateway rejection before a withdrawal intent is accepted. */\nexport class EscrowWithdrawalRejectionError extends Error {\n  override readonly name = \"EscrowWithdrawalRejectionError\";\n\n  constructor(\n    readonly httpStatus: number,\n    readonly result: EscrowWithdrawalRejectedResult,\n  ) {\n    super(result.error);\n  }\n}\n\n/**\n * Parameters for submitting a deposit tx hash to the gateway.\n *\n * The gateway will decode the `account` from the tx's calldata and\n * credit the identified account once the tx reaches the configured\n * confirmation depth.\n */\nexport interface SubmitDepositParams {\n  /** 0x-prefixed 32-byte transaction hash. */\n  txHash: `0x${string}`;\n}\n\n/**\n * Parameters for the generic op payment endpoint (`POST /v1/escrow/pay`).\n *\n * The `signature` is an EIP-712 signature over a `GenericPayment` message\n * (see {@link GENERIC_PAYMENT_TYPES} and {@link genericPaymentDomain}).\n * Build and sign the typed data with your wallet before calling\n * {@link EscrowGatewayClient.payForOp}.\n */\nexport interface PayForOpParams {\n  payerAddress: `0x${string}`;\n  opType: string;\n  opId: `0x${string}`;\n  asset: `0x${string}`;\n  /** Decimal string representation of the uint256 amount. */\n  amount: string;\n  /** Decimal string representation of the uint256 nonce. */\n  paymentNonce: string;\n  /** 0x-prefixed 65-byte EIP-712 signature hex string. */\n  signature: `0x${string}`;\n  /**\n   * Optional data-access receipt carried by x402 challenges.\n   *\n   * The gateway verifies its server signature; this type only describes the\n   * wire shape.\n   */\n  accessRecord?: EscrowAccessRecord;\n}\n\n/**\n * Parameters for `POST /v1/escrow/withdraw`.\n *\n * `withdrawNonce` and `deadline` are caller-supplied decimal uint256 strings.\n * The SDK intentionally does not generate a nonce: retrying safely requires a\n * durable caller-owned nonce source and the exact same signed payload.\n */\nexport interface WithdrawFromEscrowParams {\n  account: `0x${string}`;\n  asset: `0x${string}`;\n  amount: string;\n  withdrawNonce: string;\n  deadline: string;\n  signature: `0x${string}`;\n}\n\n/**\n * Response from `GET /v1/escrow/withdraw/nonce`.\n *\n * The gateway provides a read-only snapshot of the account's withdrawal nonce\n * state. This is **not** a reservation; multiple concurrent callers will see\n * the same `nextWithdrawNonce`. To reduce staleness risk, query immediately before\n * signing/submitting the withdrawal authorization. However, `stale_nonce` errors can\n * still occur under concurrent withdrawal attempts; if rejected, re-query and re-sign.\n *\n * Use `nextWithdrawNonce` in the signed withdrawal authorization; `lastWithdrawNonce`\n * is provided for reference and diagnostics.\n */\nexport interface WithdrawNonceResponse {\n  success: true;\n  account: `0x${string}`;\n  chainId: string;\n  lastWithdrawNonce: string | null;\n  nextWithdrawNonce: string;\n}\n\n/** Wire shape of a receipt whose server signature the gateway verifies. */\nexport interface EscrowAccessRecord {\n  dataPointId: `0x${string}`;\n  version: string;\n  accessor: `0x${string}`;\n  recordId: `0x${string}`;\n  signature: `0x${string}`;\n}\n\n/**\n * Minimal client for the gateway's escrow endpoints.\n *\n * Construct with {@link createEscrowGatewayClient}.\n */\nexport interface EscrowGatewayClient {\n  /**\n   * Notify the gateway of a submitted deposit transaction.\n   *\n   * The gateway decodes the credited account from the on-chain tx calldata\n   * and starts tracking the deposit. Call this immediately after your\n   * `depositNative` or `depositToken` tx is broadcast (it accepts pending\n   * mempool txs). Returns `202` while the tx awaits confirmation.\n   */\n  submitDeposit(params: SubmitDepositParams): Promise<DepositSubmissionResult>;\n\n  /**\n   * Read the current escrow balance for an account.\n   *\n   * Pure read \u2014 no chain calls. To force a reconciliation pass first,\n   * use {@link syncEscrowBalance}.\n   */\n  getEscrowBalance(account: `0x${string}`): Promise<EscrowBalanceResult>;\n\n  /**\n   * Force a reconciliation pass then return the updated balance.\n   *\n   * Triggers the gateway's lazy-confirmation worker for the account \u2014 any\n   * submitted deposits that have reached the configured confirmation level\n   * are credited before the balance is returned. Prefer this over\n   * {@link getEscrowBalance} when you need a fresh view after a deposit.\n   */\n  syncEscrowBalance(account: `0x${string}`): Promise<EscrowBalanceSyncResult>;\n\n  /**\n   * Authorize a payment against the payer's escrow balance.\n   *\n   * The caller must:\n   *  1. Assemble a {@link GenericPaymentMessage}.\n   *  2. Sign it with `signTypedData` using {@link GENERIC_PAYMENT_TYPES} and\n   *     the domain from {@link genericPaymentDomain}.\n   *  3. Pass the message fields + signature here.\n   *\n   * The gateway verifies the signature, checks the soft-lock balance, and\n   * records the payment. Returns 402 if the payer has insufficient balance.\n   */\n  payForOp(params: PayForOpParams): Promise<EscrowPayResult>;\n\n  /**\n   * Submit or reconcile a signed withdrawal authorization.\n   *\n   * The gateway decides which signers may authorize an account. For example,\n   * it may accept the account itself or the confirmed owner of a registered\n   * app account.\n   *\n   * Retry a `submitted` result with the exact same parameters. Do not replace\n   * `withdrawNonce`, `deadline`, or signature unless starting a new intent.\n   */\n  withdraw(params: WithdrawFromEscrowParams): Promise<EscrowWithdrawalResult>;\n\n  /**\n   * Read the authoritative next withdrawal nonce for an account.\n   *\n   * The gateway is the authority on what nonce to use; use the value from\n   * `nextWithdrawNonce` when signing a withdrawal authorization.\n   *\n   * Do NOT generate or cache nonces client-side; concurrent callers cannot be\n   * safely coordinated without durable shared state. Query this endpoint immediately\n   * before signing/submitting to reduce staleness risk. However, `stale_nonce` errors\n   * can still occur; if rejected, re-query and re-sign.\n   */\n  getWithdrawNonce(account: `0x${string}`): Promise<WithdrawNonceResponse>;\n}\n\n/** The only gateway capability required by direct data-access payment flows. */\nexport type EscrowPaymentClient = Pick<EscrowGatewayClient, \"payForOp\">;\n\n/**\n * Creates a client for the gateway escrow endpoints.\n *\n * @param baseUrl - Base URL of the DP RPC gateway\n *   (e.g. `\"https://dp.vana.org\"`). Trailing slashes are trimmed.\n *\n * @example\n * ```typescript\n * import {\n *   createEscrowGatewayClient,\n *   genericPaymentDomain,\n *   GENERIC_PAYMENT_TYPES,\n * } from \"@opendatalabs/vana-sdk/node\";\n *\n * const escrow = createEscrowGatewayClient(\"https://dp.vana.org\");\n *\n * // 1. Submit your deposit tx hash after broadcasting depositNative on-chain\n * const deposit = await escrow.submitDeposit({ txHash: \"0xabc\u2026\" });\n *\n * // 2. Force-sync and read the updated balance\n * const { balances } = await escrow.syncEscrowBalance(\"0xpayerAddress\");\n *\n * // 3. Sign and authorize a grant payment\n * const sig = await walletClient.signTypedData({\n *   domain: genericPaymentDomain(1480, \"0xEscrowContract\"),\n *   types: GENERIC_PAYMENT_TYPES,\n *   primaryType: \"GenericPayment\",\n *   message: {\n *     payerAddress: \"0xpayerAddress\",\n *     opType: \"grant\",\n *     opId: \"0xgrantId\",\n *     asset: \"0x0000000000000000000000000000000000000000\",\n *     amount: 1000000000000000000n,\n *     paymentNonce: 1n,\n *   },\n * });\n * const result = await escrow.payForOp({\n *   payerAddress: \"0xpayerAddress\",\n *   opType: \"grant\",\n *   opId: \"0xgrantId\",\n *   asset: \"0x0000000000000000000000000000000000000000\",\n *   amount: \"1000000000000000000\",\n *   paymentNonce: \"1\",\n *   signature: sig,\n * });\n * ```\n */\nexport function createEscrowGatewayClient(\n  baseUrl: string,\n): EscrowGatewayClient {\n  const base = baseUrl.replace(/\\/+$/, \"\");\n\n  async function throwOnError(res: Response, context: string): Promise<void> {\n    if (!res.ok) {\n      let detail = \"\";\n      try {\n        const body = (await res.json()) as { error?: string };\n        if (body.error) detail = `: ${body.error}`;\n      } catch {\n        // Ignore JSON parse errors; use status text only.\n      }\n      throw new Error(\n        `Escrow gateway error (${context}): ${res.status} ${res.statusText}${detail}`,\n      );\n    }\n  }\n\n  async function throwOnWithdrawError(res: Response): Promise<void> {\n    if (res.ok) return;\n\n    let body: unknown;\n    try {\n      body = await res.json();\n    } catch {\n      throw new Error(\n        `Escrow gateway error (POST /v1/escrow/withdraw): ${res.status} ${res.statusText}`,\n      );\n    }\n\n    if (isEscrowWithdrawalFailureResult(body)) {\n      throw new EscrowWithdrawalLifecycleError(res.status, body);\n    }\n    if (isEscrowWithdrawalRejectedResult(body)) {\n      throw new EscrowWithdrawalRejectionError(res.status, body);\n    }\n\n    const error = getGatewayErrorMessage(body);\n    throw new Error(\n      `Escrow gateway error (POST /v1/escrow/withdraw): ${res.status} ${res.statusText}${error ? `: ${error}` : \"\"}`,\n    );\n  }\n\n  return {\n    async submitDeposit({ txHash }) {\n      const res = await fetch(`${base}/v1/escrow/deposit`, {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\" },\n        body: JSON.stringify({ txHash }),\n      });\n      // 202 Accepted and 200 OK are both success states for deposit submission.\n      if (res.status !== 200 && res.status !== 202) {\n        await throwOnError(res, \"POST /v1/escrow/deposit\");\n      }\n      return res.json() as Promise<DepositSubmissionResult>;\n    },\n\n    async getEscrowBalance(account) {\n      const res = await fetch(\n        `${base}/v1/escrow/balance?account=${encodeURIComponent(account)}`,\n      );\n      await throwOnError(res, \"GET /v1/escrow/balance\");\n      return res.json() as Promise<EscrowBalanceResult>;\n    },\n\n    async syncEscrowBalance(account) {\n      const res = await fetch(\n        `${base}/v1/escrow/balance/sync?account=${encodeURIComponent(account)}`,\n        { method: \"POST\" },\n      );\n      await throwOnError(res, \"POST /v1/escrow/balance/sync\");\n      return res.json() as Promise<EscrowBalanceSyncResult>;\n    },\n\n    async payForOp({\n      payerAddress,\n      opType,\n      opId,\n      asset,\n      amount,\n      paymentNonce,\n      signature,\n      accessRecord,\n    }) {\n      const res = await fetch(`${base}/v1/escrow/pay`, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          Authorization: `Web3Signed ${signature}`,\n        },\n        body: JSON.stringify({\n          payerAddress,\n          opType,\n          opId,\n          asset,\n          amount,\n          paymentNonce,\n          ...(accessRecord ? { accessRecord } : {}),\n        }),\n      });\n      await throwOnError(res, \"POST /v1/escrow/pay\");\n      return res.json() as Promise<EscrowPayResult>;\n    },\n\n    async withdraw({\n      account,\n      asset,\n      amount,\n      withdrawNonce,\n      deadline,\n      signature,\n    }) {\n      const res = await fetch(`${base}/v1/escrow/withdraw`, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          Authorization: `Web3Signed ${signature}`,\n        },\n        body: JSON.stringify({\n          account,\n          asset,\n          amount,\n          withdrawNonce,\n          deadline,\n        }),\n      });\n      await throwOnWithdrawError(res);\n      return res.json() as Promise<EscrowWithdrawalResult>;\n    },\n\n    async getWithdrawNonce(account) {\n      const res = await fetch(\n        `${base}/v1/escrow/withdraw/nonce?account=${encodeURIComponent(account)}`,\n        { cache: \"no-store\" },\n      );\n      await throwOnError(res, \"GET /v1/escrow/withdraw/nonce\");\n      const body = (await res.json()) as unknown;\n      if (!isWithdrawNonceResponse(body, account)) {\n        throw new Error(\n          \"GET /v1/escrow/withdraw/nonce: invalid response structure\",\n        );\n      }\n      return body;\n    },\n  };\n}\n\nfunction getGatewayErrorMessage(body: unknown): string | undefined {\n  if (\n    typeof body === \"object\" &&\n    body !== null &&\n    \"error\" in body &&\n    typeof body.error === \"string\"\n  ) {\n    return body.error;\n  }\n  return undefined;\n}\n\nfunction isEscrowWithdrawalFailureResult(\n  body: unknown,\n): body is EscrowWithdrawalFailureResult {\n  if (typeof body !== \"object\" || body === null) return false;\n  const value = body as Record<string, unknown>;\n  return (\n    value.success === false &&\n    (value.status === \"retryable\" ||\n      value.status === \"reorged\" ||\n      value.status === \"failed\") &&\n    typeof value.error === \"string\" &&\n    isAddressHex(value.account) &&\n    isAddressHex(value.asset) &&\n    isUint256Decimal(value.amount) &&\n    isUint256Decimal(value.withdrawNonce) &&\n    isUint256Decimal(value.deadline) &&\n    (isHash(value.txHash) || value.txHash === null) &&\n    (!(\"blockNumber\" in value) || isBlockNumber(value.blockNumber))\n  );\n}\n\nfunction isEscrowWithdrawalRejectedResult(\n  body: unknown,\n): body is EscrowWithdrawalRejectedResult {\n  if (typeof body !== \"object\" || body === null) return false;\n  const value = body as Record<string, unknown>;\n  return (\n    value.success === false &&\n    value.status === \"rejected\" &&\n    isWithdrawalRejectionCode(value.code) &&\n    typeof value.error === \"string\" &&\n    isAddressHex(value.account) &&\n    isAddressHex(value.asset) &&\n    isUint256Decimal(value.amount) &&\n    isUint256Decimal(value.withdrawNonce) &&\n    isUint256Decimal(value.deadline) &&\n    optionalUint256Decimal(value.balance) &&\n    optionalUint256Decimal(value.authorizedAmount) &&\n    optionalUint256Decimal(value.withdrawingAmount) &&\n    optionalUint256Decimal(value.availableAmount) &&\n    optionalUint256Decimal(value.requestedAmount) &&\n    optionalUint256Decimal(value.minimumAmount)\n  );\n}\n\nfunction isWithdrawalRejectionCode(\n  value: unknown,\n): value is EscrowWithdrawalRejectionCode {\n  return (\n    value === \"below_minimum\" ||\n    value === \"deadline_too_far\" ||\n    value === \"expired\" ||\n    value === \"insufficient_available\" ||\n    value === \"stale_nonce\"\n  );\n}\n\nfunction optionalUint256Decimal(value: unknown): boolean {\n  return value === undefined || isUint256Decimal(value);\n}\n\nfunction isAddressHex(value: unknown): value is `0x${string}` {\n  return (\n    typeof value === \"string\" &&\n    isHex(value, { strict: true }) &&\n    value.length === 42\n  );\n}\n\nfunction isHash(value: unknown): value is `0x${string}` {\n  return (\n    typeof value === \"string\" &&\n    isHex(value, { strict: true }) &&\n    value.length === 66\n  );\n}\n\nfunction isUint256Decimal(value: unknown): value is string {\n  if (typeof value !== \"string\" || value.length === 0 || value.length > 78) {\n    return false;\n  }\n  if (!/^(0|[1-9]\\d*)$/.test(value)) return false;\n  return BigInt(value) <= 2n ** 256n - 1n;\n}\n\nfunction isBlockNumber(value: unknown): value is string | null {\n  return value === null || isUint256Decimal(value);\n}\n\nfunction isWithdrawNonceResponse(\n  body: unknown,\n  requestedAccount: `0x${string}`,\n): body is WithdrawNonceResponse {\n  if (typeof body !== \"object\" || body === null) return false;\n  const value = body as Record<string, unknown>;\n\n  if (value.success !== true) return false;\n\n  if (!isAddressHex(value.account)) return false;\n  if (value.account.toLowerCase() !== requestedAccount.toLowerCase())\n    return false;\n  if (typeof value.chainId !== \"string\") return false;\n  if (!/^(0|[1-9]\\d*)$/.test(value.chainId)) return false;\n\n  const isLastNull = value.lastWithdrawNonce === null;\n  const lastNonceValid =\n    isLastNull || isUint256Decimal(value.lastWithdrawNonce);\n  if (!lastNonceValid) return false;\n\n  if (!isUint256Decimal(value.nextWithdrawNonce)) return false;\n\n  // Validate nonce pair consistency: nextWithdrawNonce must be exactly lastWithdrawNonce + 1\n  // or exactly 1 if lastWithdrawNonce is null\n  if (isLastNull) {\n    return value.nextWithdrawNonce === \"1\";\n  }\n\n  const lastNonce = BigInt(value.lastWithdrawNonce as string);\n  const nextNonce = BigInt(value.nextWithdrawNonce as string);\n  const expectedNextNonce = lastNonce + 1n;\n\n  // Ensure no overflow (nextNonce must still be within uint256)\n  if (expectedNextNonce > 2n ** 256n - 1n) return false;\n\n  return nextNonce === expectedNextNonce;\n}\n", "/**\n * Builder key abstraction shared by the Write API and lineage reads.\n *\n * @remarks\n * Everything the Personal Server asks a builder to sign is an EIP-191\n * `personal_sign` over a Web3Signed payload, so one `signMessage` callback is\n * the whole contract. {@link resolveWriteSigner} accepts the shapes a builder\n * already has: a viem `LocalAccount` (backend, `privateKeyToAccount`), a viem\n * `WalletClient` (browser wallet), or a bare `{ signMessage }` object.\n *\n * @category Protocol\n */\n\nimport type { Account, Address, Hex } from \"viem\";\nimport type { Web3SignedSignFn } from \"../auth/web3-signed-builder\";\nimport { WriteRequestError } from \"../errors\";\n\n/** The signer the Write API drives: an EIP-191 signature over a string. */\nexport interface WriteSigner {\n  /** The builder address, when known. Used for messages only. */\n  address?: Address;\n  /** EIP-191 (`personal_sign`) over the Web3Signed payload string. */\n  signMessage: Web3SignedSignFn;\n}\n\n/** The subset of a viem `LocalAccount` the Write API uses. */\nexport interface ViemWriteAccount {\n  address: Address;\n  type: \"local\";\n  signMessage(args: { message: string }): Promise<Hex>;\n}\n\n/** The subset of a viem `WalletClient` the Write API uses. */\nexport interface ViemWriteWalletClient {\n  type?: string;\n  transport?: unknown;\n  account?: Account | undefined;\n  signMessage(args: {\n    account: Account | Address;\n    message: string;\n  }): Promise<Hex>;\n}\n\n/** Any signer {@link resolveWriteSigner} understands. */\nexport type WriteSignerSource =\n  | WriteSigner\n  | ViemWriteAccount\n  | ViemWriteWalletClient;\n\nexport interface ResolveWriteSignerOptions {\n  /**\n   * Account to sign with when the viem wallet client has no hoisted account\n   * (browser wallets). Ignored for other signer shapes.\n   */\n  account?: Account | Address;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value !== null && typeof value === \"object\";\n}\n\nfunction isViemWriteAccount(source: unknown): source is ViemWriteAccount {\n  return (\n    isRecord(source) &&\n    source.type === \"local\" &&\n    typeof source.address === \"string\" &&\n    typeof source.signMessage === \"function\"\n  );\n}\n\n/**\n * A viem client: `createWalletClient` stamps `type: \"walletClient\"`, and every\n * viem client carries a `transport`. Either marker is enough; a bare\n * `{ signMessage }` signer has neither, and a local account has\n * `type: \"local\"`.\n */\nfunction isViemWriteWalletClient(\n  source: unknown,\n): source is ViemWriteWalletClient {\n  return (\n    isRecord(source) &&\n    typeof source.signMessage === \"function\" &&\n    source.type !== \"local\" &&\n    (source.type === \"walletClient\" || \"transport\" in source)\n  );\n}\n\nfunction accountAddress(account: Account | Address): Address {\n  return typeof account === \"string\" ? account : account.address;\n}\n\n/**\n * Normalise a builder key into a {@link WriteSigner}.\n *\n * @param source - A viem `LocalAccount`, a viem `WalletClient`, or a\n *   `{ signMessage }` object (returned as-is).\n * @param options - `account` for a wallet client without a hoisted account.\n * @returns A signer whose `signMessage` produces EIP-191 signatures.\n * @throws {WriteRequestError} When a wallet client has no account to sign\n *   with, or the source exposes no `signMessage` function.\n */\nexport function resolveWriteSigner(\n  source: WriteSignerSource,\n  options: ResolveWriteSignerOptions = {},\n): WriteSigner {\n  if (isViemWriteWalletClient(source)) {\n    const account = options.account ?? source.account;\n    if (account === undefined) {\n      throw new WriteRequestError(\n        \"Viem wallet client requires an account option or account property\",\n      );\n    }\n    return {\n      address: accountAddress(account),\n      signMessage: (message) => source.signMessage({ account, message }),\n    };\n  }\n  if (isViemWriteAccount(source)) {\n    return {\n      address: source.address,\n      signMessage: (message) => source.signMessage({ message }),\n    };\n  }\n  if (!isRecord(source) || typeof source.signMessage !== \"function\") {\n    throw new WriteRequestError(\n      \"signer must be a viem LocalAccount, a viem WalletClient, or a { signMessage } object\",\n    );\n  }\n  return source as WriteSigner;\n}\n", "/**\n * Personal Server registration typed-data and signing helpers.\n *\n * These helpers are protocol-owned and runtime-neutral. Apps can sign with\n * viem local accounts, wallet clients, Account products, or any equivalent\n * signer by adapting to {@link PersonalServerRegistrationSigner}.\n *\n * @category Protocol\n */\n\nimport {\n  isAddress,\n  type Account,\n  type Address,\n  type Hex,\n  type TypedDataDomain,\n  type TypedDataDefinition,\n} from \"viem\";\nimport {\n  SERVER_REGISTRATION_TYPES,\n  serverRegistrationDomain,\n  type DataPortabilityGatewayConfig,\n  type ServerRegistrationMessage,\n} from \"./eip712\";\nimport { vanaMainnet } from \"../chains/definitions\";\nimport { getContractAddress } from \"../generated/addresses\";\n\ntype SupportedContractAddressChainId = Parameters<typeof getContractAddress>[0];\n\nexport const PERSONAL_SERVER_REGISTRATION_DEFAULT_CHAIN_ID =\n  vanaMainnet.id as SupportedContractAddressChainId;\nexport const PERSONAL_SERVER_REGISTRATION_DEFAULT_VERIFYING_CONTRACT =\n  getContractAddress(\n    PERSONAL_SERVER_REGISTRATION_DEFAULT_CHAIN_ID,\n    \"DataPortabilityServers\",\n  );\n\nexport type PersonalServerRegistrationTypedData = TypedDataDefinition<\n  typeof SERVER_REGISTRATION_TYPES,\n  \"ServerRegistration\"\n> & {\n  message: ServerRegistrationMessage;\n};\n\nexport interface PersonalServerRegistrationSigner {\n  address: Address;\n  signTypedData(\n    typedData: PersonalServerRegistrationTypedData,\n  ): Promise<Hex> | Hex;\n}\n\nexport interface ViemPersonalServerRegistrationWalletClient {\n  account?: Account | Address | null;\n  signTypedData(\n    typedData: PersonalServerRegistrationTypedData & {\n      account?: Account | Address;\n    },\n  ): Promise<Hex>;\n}\n\nexport type ViemPersonalServerRegistrationSignerSource =\n  | PersonalServerRegistrationSigner\n  | ViemPersonalServerRegistrationWalletClient;\n\nexport interface BuildPersonalServerRegistrationTypedDataInput {\n  ownerAddress: Address;\n  serverAddress: Address;\n  serverPublicKey: string;\n  serverUrl: string;\n  config?: DataPortabilityGatewayConfig;\n  chainId?: number;\n  verifyingContract?: Address;\n}\n\nexport interface BuildPersonalServerRegistrationSignatureInput {\n  signer: PersonalServerRegistrationSigner;\n  serverAddress: Address;\n  serverPublicKey: string;\n  serverUrl: string;\n  config?: DataPortabilityGatewayConfig;\n  chainId?: number;\n  verifyingContract?: Address;\n}\n\nexport interface PersonalServerRegistrationSignature {\n  signature: Hex;\n  signerAddress: Address;\n  typedData: PersonalServerRegistrationTypedData;\n}\n\nexport interface PersonalServerRegistrationDomainInput {\n  config?: DataPortabilityGatewayConfig;\n  chainId?: number;\n  verifyingContract?: Address;\n}\n\nfunction assertAddress(value: Address, name: string): void {\n  if (!isAddress(value)) {\n    throw new Error(`${name} must be a valid EVM address`);\n  }\n}\n\nfunction getAccountAddress(\n  account: Account | Address | null | undefined,\n): Address | undefined {\n  if (!account) {\n    return undefined;\n  }\n\n  return typeof account === \"string\" ? account : account.address;\n}\n\nfunction isPersonalServerRegistrationSigner(\n  source: ViemPersonalServerRegistrationSignerSource,\n): source is PersonalServerRegistrationSigner {\n  return \"address\" in source && typeof source.signTypedData === \"function\";\n}\n\nfunction getDefaultServerRegistrationContract(chainId: number): Address {\n  return getContractAddress(\n    chainId as SupportedContractAddressChainId,\n    \"DataPortabilityServers\",\n  );\n}\n\nexport function createViemPersonalServerRegistrationSigner(\n  source: ViemPersonalServerRegistrationSignerSource,\n  options: { account?: Account | Address } = {},\n): PersonalServerRegistrationSigner {\n  if (isPersonalServerRegistrationSigner(source)) {\n    return source;\n  }\n\n  const accountAddress =\n    getAccountAddress(options.account) ?? getAccountAddress(source.account);\n\n  if (accountAddress) {\n    return {\n      address: accountAddress,\n      signTypedData: (typedData) =>\n        source.signTypedData({\n          ...typedData,\n          account: options.account ?? source.account ?? accountAddress,\n        }),\n    };\n  }\n\n  throw new Error(\n    \"Viem wallet client requires an account option or account property\",\n  );\n}\n\nexport function personalServerRegistrationDomain(\n  input: PersonalServerRegistrationDomainInput = {},\n): TypedDataDomain {\n  if (input.config) {\n    return serverRegistrationDomain(input.config);\n  }\n\n  const chainId =\n    input.chainId ?? PERSONAL_SERVER_REGISTRATION_DEFAULT_CHAIN_ID;\n  const verifyingContract =\n    input.verifyingContract ?? getDefaultServerRegistrationContract(chainId);\n  assertAddress(verifyingContract, \"verifyingContract\");\n\n  return {\n    name: \"Vana Data Portability\",\n    version: \"1\",\n    chainId,\n    verifyingContract,\n  };\n}\n\nexport function buildPersonalServerRegistrationTypedData(\n  input: BuildPersonalServerRegistrationTypedDataInput,\n): PersonalServerRegistrationTypedData {\n  assertAddress(input.ownerAddress, \"ownerAddress\");\n  assertAddress(input.serverAddress, \"serverAddress\");\n\n  return {\n    domain: personalServerRegistrationDomain(input),\n    types: SERVER_REGISTRATION_TYPES,\n    primaryType: \"ServerRegistration\",\n    message: {\n      ownerAddress: input.ownerAddress,\n      serverAddress: input.serverAddress,\n      publicKey: input.serverPublicKey,\n      serverUrl: input.serverUrl,\n    },\n  };\n}\n\nexport async function buildPersonalServerRegistrationSignature(\n  input: BuildPersonalServerRegistrationSignatureInput,\n): Promise<PersonalServerRegistrationSignature> {\n  const typedData = buildPersonalServerRegistrationTypedData({\n    ownerAddress: input.signer.address,\n    serverAddress: input.serverAddress,\n    serverPublicKey: input.serverPublicKey,\n    serverUrl: input.serverUrl,\n    config: input.config,\n    chainId: input.chainId,\n    verifyingContract: input.verifyingContract,\n  });\n  const signature = await input.signer.signTypedData(typedData);\n\n  return {\n    signature,\n    signerAddress: input.signer.address,\n    typedData,\n  };\n}\n\nexport const registerPersonalServerSignature =\n  buildPersonalServerRegistrationSignature;\n", "/**\n * PS Lite owner-binding message and signing helpers.\n *\n * PS Lite uses this replayable personal-sign message as a wallet-owned input\n * for opening the user's local encrypted runtime. This is intentionally\n * separate from Personal Server registration, which is EIP-712 typed data.\n *\n * @category Personal Server Lite\n */\n\nimport {\n  isAddress,\n  type Account,\n  type Address,\n  type Hex,\n  type SignableMessage,\n} from \"viem\";\n\nexport const PERSONAL_SERVER_LITE_OWNER_BINDING_VERSION =\n  \"vana.ps-lite.owner-binding.v1\";\nexport const PERSONAL_SERVER_LITE_OWNER_BINDING_PURPOSE = \"ps-lite-owner\";\nexport const PERSONAL_SERVER_LITE_OWNER_BINDING_PREFIX =\n  `${PERSONAL_SERVER_LITE_OWNER_BINDING_VERSION}:${PERSONAL_SERVER_LITE_OWNER_BINDING_PURPOSE}:` as const;\n\nexport type PersonalServerLiteOwnerBindingPurpose =\n  typeof PERSONAL_SERVER_LITE_OWNER_BINDING_PURPOSE;\n\nexport type PersonalServerLiteOwnerBindingMessage =\n  `${typeof PERSONAL_SERVER_LITE_OWNER_BINDING_PREFIX}${Lowercase<Address>}`;\n\nexport interface PersonalServerLiteOwnerBindingSigner {\n  address: Address;\n  signMessage(input: {\n    message: PersonalServerLiteOwnerBindingMessage;\n  }): Promise<Hex> | Hex;\n}\n\nexport interface ViemPersonalServerLiteOwnerBindingWalletClient {\n  account?: Account | Address | null;\n  signMessage(input: {\n    account?: Account | Address;\n    message: SignableMessage;\n  }): Promise<Hex>;\n}\n\nexport type ViemPersonalServerLiteOwnerBindingSignerSource =\n  | PersonalServerLiteOwnerBindingSigner\n  | ViemPersonalServerLiteOwnerBindingWalletClient;\n\nexport interface BuildPersonalServerLiteOwnerBindingSignatureInput {\n  signer: PersonalServerLiteOwnerBindingSigner;\n}\n\nexport interface PersonalServerLiteOwnerBindingSignature {\n  signature: Hex;\n  signerAddress: Address;\n  message: PersonalServerLiteOwnerBindingMessage;\n  purpose: PersonalServerLiteOwnerBindingPurpose;\n}\n\nfunction assertAddress(value: Address, name: string): void {\n  if (!isAddress(value)) {\n    throw new Error(`${name} must be a valid EVM address`);\n  }\n}\n\nfunction getAccountAddress(\n  account: Account | Address | null | undefined,\n): Address | undefined {\n  if (!account) {\n    return undefined;\n  }\n\n  return typeof account === \"string\" ? account : account.address;\n}\n\nfunction isPersonalServerLiteOwnerBindingSigner(\n  source: ViemPersonalServerLiteOwnerBindingSignerSource,\n): source is PersonalServerLiteOwnerBindingSigner {\n  return \"address\" in source && typeof source.signMessage === \"function\";\n}\n\nexport function buildPersonalServerLiteOwnerBindingMessage(\n  ownerAddress: Address,\n): PersonalServerLiteOwnerBindingMessage {\n  assertAddress(ownerAddress, \"ownerAddress\");\n  return `${PERSONAL_SERVER_LITE_OWNER_BINDING_PREFIX}${ownerAddress.toLowerCase()}` as PersonalServerLiteOwnerBindingMessage;\n}\n\nexport function createViemPersonalServerLiteOwnerBindingSigner(\n  source: ViemPersonalServerLiteOwnerBindingSignerSource,\n  options: { account?: Account | Address } = {},\n): PersonalServerLiteOwnerBindingSigner {\n  if (isPersonalServerLiteOwnerBindingSigner(source)) {\n    return source;\n  }\n\n  const accountAddress =\n    getAccountAddress(options.account) ?? getAccountAddress(source.account);\n\n  if (accountAddress) {\n    return {\n      address: accountAddress,\n      signMessage: ({ message }) =>\n        source.signMessage({\n          account: options.account ?? source.account ?? accountAddress,\n          message,\n        }),\n    };\n  }\n\n  throw new Error(\n    \"Viem wallet client requires an account option or account property\",\n  );\n}\n\nexport async function buildPersonalServerLiteOwnerBindingSignature(\n  input: BuildPersonalServerLiteOwnerBindingSignatureInput,\n): Promise<PersonalServerLiteOwnerBindingSignature> {\n  const message = buildPersonalServerLiteOwnerBindingMessage(\n    input.signer.address,\n  );\n  const signature = await input.signer.signMessage({ message });\n\n  return {\n    signature,\n    signerAddress: input.signer.address,\n    message,\n    purpose: PERSONAL_SERVER_LITE_OWNER_BINDING_PURPOSE,\n  };\n}\n\nexport const signPersonalServerLiteOwnerBinding =\n  buildPersonalServerLiteOwnerBindingSignature;\n", "/**\n * Optional first-party Account integration for Personal Server registration.\n *\n * The protocol helper lives in `protocol/personal-server-registration`.\n * This module is only for callers that want to use an Account deployment's\n * constrained silent-sign endpoint.\n *\n * @category Account\n */\n\nimport { isAddress, type Address, type Hex } from \"viem\";\nimport {\n  buildPersonalServerRegistrationTypedData,\n  type BuildPersonalServerRegistrationTypedDataInput,\n  type PersonalServerRegistrationSignature,\n  type PersonalServerRegistrationSigner,\n  type PersonalServerRegistrationTypedData,\n  personalServerRegistrationDomain,\n} from \"../protocol/personal-server-registration\";\nimport { SERVER_REGISTRATION_TYPES } from \"../protocol/eip712\";\n\nexport const ACCOUNT_PERSONAL_SERVER_REGISTRATION_INTENT =\n  \"personal_server.server_registration.v1\" as const;\n\nexport type AccountPersonalServerRegistrationIntent =\n  typeof ACCOUNT_PERSONAL_SERVER_REGISTRATION_INTENT;\n\nexport type AccountPersonalServerRegistrationStatus =\n  | \"signed\"\n  | \"confirmation_required\"\n  | \"fallback_required\";\n\nexport interface AccountPersonalServerRegistrationRequest extends Omit<\n  BuildPersonalServerRegistrationTypedDataInput,\n  \"ownerAddress\"\n> {}\n\nexport interface AccountPersonalServerRegistrationConfig {\n  /**\n   * Origin for the Account deployment to call, e.g. an app-dev Account origin.\n   * No production origin is assumed by the SDK.\n   */\n  accountOrigin: string;\n  /**\n   * Path for Account's constrained PS registration silent-sign endpoint.\n   */\n  endpointPath?: string;\n  /**\n   * Optional fetch implementation for tests and non-default runtimes.\n   */\n  fetchImpl?: typeof fetch;\n  /**\n   * Optional signer used when Account says user confirmation is required and\n   * returns typed data for the caller to sign interactively.\n   */\n  fallbackSigner?: PersonalServerRegistrationSigner;\n}\n\nexport type AccountPersonalServerRegistrationSignature =\n  PersonalServerRegistrationSignature & {\n    intent: AccountPersonalServerRegistrationIntent;\n  };\n\nexport interface AccountSignedPersonalServerRegistration {\n  status: \"signed\";\n  result: AccountPersonalServerRegistrationSignature;\n}\n\nexport interface AccountConfirmationRequiredPersonalServerRegistration {\n  status: \"confirmation_required\";\n  typedData: PersonalServerRegistrationTypedData;\n  signerAddress?: Address;\n}\n\nexport interface AccountFallbackSignedPersonalServerRegistration {\n  status: \"fallback_signed\";\n  accountStatus: \"confirmation_required\";\n  result: AccountPersonalServerRegistrationSignature;\n}\n\nexport type AccountPersonalServerRegistrationResult =\n  | AccountSignedPersonalServerRegistration\n  | AccountConfirmationRequiredPersonalServerRegistration\n  | AccountFallbackSignedPersonalServerRegistration;\n\nexport class AccountPersonalServerRegistrationError extends Error {\n  status: number;\n  code?: string;\n  details?: unknown;\n\n  constructor(input: {\n    status: number;\n    message: string;\n    code?: string;\n    details?: unknown;\n  }) {\n    super(input.message);\n    this.name = \"AccountPersonalServerRegistrationError\";\n    this.status = input.status;\n    this.code = input.code;\n    this.details = input.details;\n  }\n}\n\ninterface AccountSilentSignResponse {\n  status: AccountPersonalServerRegistrationStatus;\n  signature?: Hex;\n  signerAddress?: Address;\n  signer?: { address?: Address };\n  typedData?: PersonalServerRegistrationTypedData;\n  typed_data?: PersonalServerRegistrationTypedData;\n  error?: unknown;\n}\n\n// Account-owned route policy. Protocol signing primitives deliberately do not\n// define Account intent names or API paths.\nconst DEFAULT_ACCOUNT_PS_REGISTRATION_PATH =\n  \"/api/v1/intents/personal-server-registration/sign\";\n\nfunction trimTrailingSlash(value: string): string {\n  return value.replace(/\\/+$/, \"\");\n}\n\nfunction assertAddress(value: Address, name: string): void {\n  if (!isAddress(value)) {\n    throw new Error(`${name} must be a valid EVM address`);\n  }\n}\n\nasync function parseAccountResponse(\n  response: Response,\n): Promise<AccountSilentSignResponse> {\n  const body = (await response.json().catch(() => undefined)) as unknown;\n\n  if (!response.ok) {\n    throw new AccountPersonalServerRegistrationError({\n      status: response.status,\n      code: accountErrorCode(body),\n      message: accountErrorMessage(response.status, body),\n      details: body,\n    });\n  }\n\n  return body as AccountSilentSignResponse;\n}\n\nfunction accountErrorMessage(status: number, body: unknown): string {\n  const nestedMessage = nestedAccountErrorField(body, \"message\");\n  if (nestedMessage) {\n    return nestedMessage;\n  }\n\n  if (isRecord(body) && typeof body.message === \"string\") {\n    return body.message;\n  }\n\n  const code = accountErrorCode(body);\n  if (code) {\n    return `Account PS registration signing failed: ${code}`;\n  }\n\n  return `Account PS registration signing failed: ${status}`;\n}\n\nfunction accountErrorCode(body: unknown): string | undefined {\n  const nestedCode = nestedAccountErrorField(body, \"code\");\n  if (nestedCode) {\n    return nestedCode;\n  }\n\n  if (isRecord(body)) {\n    if (typeof body.code === \"string\") {\n      return body.code;\n    }\n    if (typeof body.error === \"string\") {\n      return body.error;\n    }\n  }\n\n  return undefined;\n}\n\nfunction nestedAccountErrorField(\n  body: unknown,\n  field: \"code\" | \"message\",\n): string | undefined {\n  if (!isRecord(body) || !isRecord(body.error)) {\n    return undefined;\n  }\n\n  const value = body.error[field];\n  return typeof value === \"string\" ? value : undefined;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === \"object\" && value !== null;\n}\n\nfunction normalizeAccountResponse(\n  response: AccountSilentSignResponse,\n): AccountSilentSignResponse {\n  return {\n    ...response,\n    status:\n      response.status === \"fallback_required\"\n        ? \"confirmation_required\"\n        : response.status,\n    signerAddress: response.signerAddress ?? response.signer?.address,\n    typedData: response.typedData ?? response.typed_data,\n  };\n}\n\nfunction buildSignedResult(\n  response: Required<\n    Pick<AccountSilentSignResponse, \"signature\" | \"signerAddress\">\n  > &\n    Pick<AccountSilentSignResponse, \"typedData\">,\n  request: AccountPersonalServerRegistrationRequest,\n): AccountPersonalServerRegistrationSignature {\n  assertAddress(response.signerAddress, \"signerAddress\");\n  if (response.typedData) {\n    assertTypedDataMatchesRequest(\n      response.typedData,\n      request,\n      response.signerAddress,\n    );\n  }\n\n  return {\n    signature: response.signature,\n    signerAddress: response.signerAddress,\n    typedData:\n      response.typedData ??\n      buildPersonalServerRegistrationTypedData({\n        ownerAddress: response.signerAddress,\n        ...request,\n      }),\n    intent: ACCOUNT_PERSONAL_SERVER_REGISTRATION_INTENT,\n  };\n}\n\nfunction assertTypedDataMatchesRequest(\n  typedData: PersonalServerRegistrationTypedData,\n  request: AccountPersonalServerRegistrationRequest,\n  expectedSignerAddress?: Address,\n): void {\n  assertAddress(\n    typedData.message.ownerAddress,\n    \"typedData.message.ownerAddress\",\n  );\n  assertAddress(\n    typedData.message.serverAddress,\n    \"typedData.message.serverAddress\",\n  );\n\n  if (\n    expectedSignerAddress &&\n    !sameAddress(typedData.message.ownerAddress, expectedSignerAddress)\n  ) {\n    throw new Error(\n      \"Account typedData ownerAddress must match the expected signer address\",\n    );\n  }\n\n  if (!sameAddress(typedData.message.serverAddress, request.serverAddress)) {\n    throw new Error(\n      \"Account typedData serverAddress must match the requested serverAddress\",\n    );\n  }\n\n  if (typedData.message.publicKey !== request.serverPublicKey) {\n    throw new Error(\n      \"Account typedData publicKey must match the requested serverPublicKey\",\n    );\n  }\n\n  if (typedData.message.serverUrl !== request.serverUrl) {\n    throw new Error(\n      \"Account typedData serverUrl must match the requested serverUrl\",\n    );\n  }\n\n  if (typedData.primaryType !== \"ServerRegistration\") {\n    throw new Error(\"Account typedData primaryType must be ServerRegistration\");\n  }\n\n  if (\n    JSON.stringify(typedData.types) !==\n    JSON.stringify(SERVER_REGISTRATION_TYPES)\n  ) {\n    throw new Error(\"Account typedData types must be ServerRegistration types\");\n  }\n\n  const expectedDomain = personalServerRegistrationDomain({\n    config: request.config,\n    chainId: request.chainId,\n    verifyingContract: request.verifyingContract,\n  });\n  if (!domainsEqual(typedData.domain, expectedDomain)) {\n    throw new Error(\"Account typedData domain must match the requested domain\");\n  }\n}\n\nfunction sameAddress(a: Address, b: Address): boolean {\n  return a.toLowerCase() === b.toLowerCase();\n}\n\nfunction domainsEqual(\n  a: PersonalServerRegistrationTypedData[\"domain\"],\n  b: PersonalServerRegistrationTypedData[\"domain\"],\n): boolean {\n  if (!a || !b) {\n    return false;\n  }\n\n  return (\n    a.name === b.name &&\n    a.version === b.version &&\n    Number(a.chainId) === Number(b.chainId) &&\n    String(a.verifyingContract ?? \"\").toLowerCase() ===\n      String(b.verifyingContract ?? \"\").toLowerCase() &&\n    a.salt === b.salt\n  );\n}\n\nexport async function signPersonalServerRegistrationWithAccount(\n  config: AccountPersonalServerRegistrationConfig,\n  request: AccountPersonalServerRegistrationRequest,\n): Promise<AccountPersonalServerRegistrationResult> {\n  assertAddress(request.serverAddress, \"serverAddress\");\n\n  const fetchImpl = config.fetchImpl ?? globalThis.fetch.bind(globalThis);\n  const endpoint = new URL(\n    config.endpointPath ?? DEFAULT_ACCOUNT_PS_REGISTRATION_PATH,\n    `${trimTrailingSlash(config.accountOrigin)}/`,\n  );\n\n  const response = await fetchImpl(endpoint, {\n    method: \"POST\",\n    headers: { \"content-type\": \"application/json\" },\n    credentials: \"include\",\n    body: JSON.stringify({\n      intent: ACCOUNT_PERSONAL_SERVER_REGISTRATION_INTENT,\n      serverAddress: request.serverAddress,\n      serverPublicKey: request.serverPublicKey,\n      serverUrl: request.serverUrl,\n      config: request.config,\n      chainId: request.chainId,\n      verifyingContract: request.verifyingContract,\n    }),\n  });\n  const body = normalizeAccountResponse(await parseAccountResponse(response));\n\n  if (body.status === \"signed\") {\n    if (!body.signature || !body.signerAddress) {\n      throw new Error(\n        \"Account signed response must include signature and signerAddress\",\n      );\n    }\n\n    return {\n      status: \"signed\",\n      result: buildSignedResult(\n        {\n          signature: body.signature,\n          signerAddress: body.signerAddress,\n          typedData: body.typedData,\n        },\n        request,\n      ),\n    };\n  }\n\n  if (body.status === \"confirmation_required\") {\n    if (!body.typedData) {\n      throw new Error(\n        \"Account confirmation_required response must include typedData\",\n      );\n    }\n    assertTypedDataMatchesRequest(body.typedData, request, body.signerAddress);\n\n    if (!config.fallbackSigner) {\n      return {\n        status: \"confirmation_required\",\n        typedData: body.typedData,\n        signerAddress: body.signerAddress,\n      };\n    }\n\n    assertTypedDataMatchesRequest(\n      body.typedData,\n      request,\n      config.fallbackSigner.address,\n    );\n    const signature = await config.fallbackSigner.signTypedData(body.typedData);\n\n    return {\n      status: \"fallback_signed\",\n      accountStatus: \"confirmation_required\",\n      result: {\n        signature,\n        signerAddress: config.fallbackSigner.address,\n        typedData: body.typedData,\n        intent: ACCOUNT_PERSONAL_SERVER_REGISTRATION_INTENT,\n      },\n    };\n  }\n\n  throw new Error(\n    `Unsupported Account PS registration signing status: ${String(body.status)}`,\n  );\n}\n", "/**\n * Optional first-party Account integration for PS Lite owner binding.\n *\n * The PS Lite helper lives in `personal-server-lite/owner-binding`.\n * This module adapts any Account-style client exposing `getAddress` and\n * `signMessage` to the SDK owner-binding signature shape.\n *\n * @category Account\n */\n\nimport type { Address, Hex } from \"viem\";\nimport {\n  buildPersonalServerLiteOwnerBindingMessage,\n  PERSONAL_SERVER_LITE_OWNER_BINDING_PURPOSE,\n  type PersonalServerLiteOwnerBindingSignature,\n} from \"../personal-server-lite/owner-binding\";\n\nexport interface AccountPersonalServerLiteOwnerBindingClient {\n  getAddress(): Promise<Address | null> | Address | null;\n  signMessage(input: {\n    message: ReturnType<typeof buildPersonalServerLiteOwnerBindingMessage>;\n  }): Promise<Hex> | Hex;\n}\n\nexport interface SignPersonalServerLiteOwnerBindingWithAccountClientConfig {\n  client: AccountPersonalServerLiteOwnerBindingClient;\n}\n\nexport class AccountPersonalServerLiteOwnerBindingError extends Error {\n  code?: number | string;\n  details?: unknown;\n\n  constructor(input: {\n    message: string;\n    code?: number | string;\n    details?: unknown;\n  }) {\n    super(input.message);\n    this.name = \"AccountPersonalServerLiteOwnerBindingError\";\n    this.code = input.code;\n    this.details = input.details;\n  }\n}\n\nexport async function signPersonalServerLiteOwnerBindingWithAccountClient(\n  config: SignPersonalServerLiteOwnerBindingWithAccountClientConfig,\n): Promise<PersonalServerLiteOwnerBindingSignature> {\n  let address: Address | null;\n  try {\n    address = await config.client.getAddress();\n  } catch (error) {\n    throw accountOwnerBindingError(error);\n  }\n\n  if (!address) {\n    throw new AccountPersonalServerLiteOwnerBindingError({\n      message: \"Account did not return a wallet address\",\n      code: \"account_address_required\",\n    });\n  }\n\n  const message = buildPersonalServerLiteOwnerBindingMessage(address);\n  let signature: Hex;\n  try {\n    signature = await config.client.signMessage({ message });\n  } catch (error) {\n    throw accountOwnerBindingError(error);\n  }\n\n  return {\n    signature,\n    signerAddress: address,\n    message,\n    purpose: PERSONAL_SERVER_LITE_OWNER_BINDING_PURPOSE,\n  };\n}\n\nfunction accountOwnerBindingError(\n  error: unknown,\n): AccountPersonalServerLiteOwnerBindingError {\n  if (error instanceof AccountPersonalServerLiteOwnerBindingError) {\n    return error;\n  }\n\n  const rpcError = error as\n    | { code?: number | string; message?: string }\n    | undefined;\n  const code = rpcError?.code;\n  const message =\n    typeof rpcError?.message === \"string\" && rpcError.message.length > 0\n      ? rpcError.message\n      : \"Account PS Lite owner-binding signature failed\";\n\n  return new AccountPersonalServerLiteOwnerBindingError({\n    message,\n    code,\n    details: error,\n  });\n}\n", "import { verifyTypedData } from \"viem\";\nimport {\n  GRANT_REGISTRATION_TYPES,\n  grantRegistrationDomain,\n  type DataPortabilityGatewayConfig,\n} from \"./eip712\";\n\nexport interface VerifyGrantRegistrationInput {\n  gatewayConfig: DataPortabilityGatewayConfig;\n  grantorAddress: `0x${string}`;\n  granteeId: `0x${string}`;\n  scopes: string[];\n  // Decimal-string uint256 is the wire format; bigint/number are accepted\n  // for ergonomics. Must be >= 1 (first registration uses 1; each override\n  // strictly increases it \u2014 see GRANT_REGISTRATION_TYPES).\n  grantVersion: bigint | number | string;\n  // Unix seconds. 0 = no expiry. Anything > 0 is enforced against nowSeconds.\n  expiresAt: bigint | number | string;\n  signature: `0x${string}`;\n  nowSeconds?: number;\n}\n\nexport type VerifyGrantRegistrationResult =\n  | {\n      valid: true;\n      grantorAddress: `0x${string}`;\n      granteeId: `0x${string}`;\n      scopes: string[];\n      grantVersion: string;\n      expiresAt: string;\n    }\n  | {\n      valid: false;\n      error: string;\n    };\n\nfunction isHexString(value: unknown): value is `0x${string}` {\n  return typeof value === \"string\" && value.startsWith(\"0x\");\n}\n\nexport function isDataPortabilityGatewayConfig(\n  value: unknown,\n): value is DataPortabilityGatewayConfig {\n  if (value === null || typeof value !== \"object\" || Array.isArray(value)) {\n    return false;\n  }\n  const config = value as Record<string, unknown>;\n  const contracts = config[\"contracts\"];\n  if (\n    typeof config[\"chainId\"] !== \"number\" ||\n    !Number.isInteger(config[\"chainId\"]) ||\n    config[\"chainId\"] <= 0 ||\n    contracts === null ||\n    typeof contracts !== \"object\" ||\n    Array.isArray(contracts)\n  ) {\n    return false;\n  }\n  const c = contracts as Record<string, unknown>;\n  return (\n    isHexString(c[\"dataRegistry\"]) &&\n    isHexString(c[\"dataPortabilityPermissions\"]) &&\n    isHexString(c[\"dataPortabilityServer\"]) &&\n    isHexString(c[\"dataPortabilityGrantees\"]) &&\n    isHexString(c[\"dataPortabilityEscrow\"]) &&\n    isHexString(c[\"feeRegistry\"])\n  );\n}\n\nfunction toUint256(value: bigint | number | string): bigint | null {\n  try {\n    // Reject `number` inputs outside the safe-integer range \u2014 `BigInt(2**53 + 1)`\n    // doesn't throw, it just converts whatever rounded value JS already stored,\n    // which would silently corrupt grantVersion/expiresAt for any uint256 large\n    // enough to lose precision in a double. Callers that need values past\n    // `MAX_SAFE_INTEGER` must pass a string or bigint.\n    if (typeof value === \"number\" && !Number.isSafeInteger(value)) {\n      return null;\n    }\n    const big = typeof value === \"bigint\" ? value : BigInt(value);\n    if (big < 0n) return null;\n    return big;\n  } catch {\n    return null;\n  }\n}\n\nexport async function verifyGrantRegistration(\n  input: VerifyGrantRegistrationInput,\n): Promise<VerifyGrantRegistrationResult> {\n  if (!Array.isArray(input.scopes) || input.scopes.length === 0) {\n    return { valid: false, error: \"scopes must be a non-empty array\" };\n  }\n  if (!input.scopes.every((scope) => typeof scope === \"string\")) {\n    return { valid: false, error: \"scopes must contain only strings\" };\n  }\n\n  const grantVersion = toUint256(input.grantVersion);\n  if (grantVersion === null || grantVersion < 1n) {\n    return { valid: false, error: \"grantVersion must be a uint256 >= 1\" };\n  }\n\n  const expiresAt = toUint256(input.expiresAt);\n  if (expiresAt === null) {\n    return { valid: false, error: \"expiresAt must be a non-negative uint256\" };\n  }\n\n  let valid: boolean;\n  try {\n    valid = await verifyTypedData({\n      address: input.grantorAddress,\n      domain: grantRegistrationDomain(input.gatewayConfig),\n      types: GRANT_REGISTRATION_TYPES,\n      primaryType: \"GrantRegistration\",\n      message: {\n        grantorAddress: input.grantorAddress,\n        granteeId: input.granteeId,\n        scopes: input.scopes,\n        grantVersion,\n        expiresAt,\n      },\n      signature: input.signature,\n    });\n  } catch {\n    return { valid: false, error: \"EIP-712 signature verification failed\" };\n  }\n\n  if (!valid) {\n    return { valid: false, error: \"Grant signature does not match grantor\" };\n  }\n\n  // 0 is the \"no expiry\" sentinel \u2014 only enforce when expiresAt > 0.\n  const nowSeconds = input.nowSeconds ?? Math.floor(Date.now() / 1000);\n  if (expiresAt > 0n && expiresAt < BigInt(nowSeconds)) {\n    return { valid: false, error: \"Grant has expired\" };\n  }\n\n  return {\n    valid: true,\n    grantorAddress: input.grantorAddress,\n    granteeId: input.granteeId,\n    scopes: input.scopes,\n    grantVersion: grantVersion.toString(),\n    expiresAt: expiresAt.toString(),\n  };\n}\n", "/**\n * Adapter for the on-chain FeeRegistry contract \u2014 the source of truth the\n * gateway re-reads on every /v1/escrow/pay to size the payment amount.\n *\n * The registry stores per-operation `{amount, asset, payee, enabled}`\n * records keyed on `keccak256(name)`. SDK consumers (builders sizing\n * payments) MUST read fees from this contract rather than hardcoding\n * them, or the signed `amount` won't match the gateway's expected total\n * and /v1/escrow/pay returns 400.\n *\n * Five operation kinds are wired up; each kind's name matches the\n * corresponding `payments.kind` column value on the gateway:\n *\n *   - 'grant_registration'   \u2014 one-time fee when a grant is first registered\n *                              (POST /v1/grants).\n *   - 'data_access'          \u2014 per-access surcharge on grant payments\n *                              (every accessRecord posted against a grant).\n *   - 'data_registration'    \u2014 one-time fee for registering a data point\n *                              (POST /v1/data \u2192 addDataWithSignature).\n *   - 'server_registration'  \u2014 one-time fee for registering a personal server\n *                              (POST /v1/servers).\n *   - 'builder_registration' \u2014 one-time fee for registering a builder\n *                              (POST /v1/builders; gateway-only, no on-chain\n *                              submission).\n *\n * Disabled or unregistered fees skip enforcement: the corresponding\n * operation settles WITHOUT requiring a payment from escrow. `getFee`\n * surfaces this via `enabled: false` rather than throwing \u2014 the gateway\n * itself treats a disabled fee as a steady state, not a misconfig.\n *\n * Deployers can override the on-chain operation strings via\n * `FEE_REGISTRY_<KIND>_OP` env vars on the gateway side; the matching\n * SDK escape hatch is the `opts.<kind>OpName` arguments.\n *\n * This module is signer/transport-agnostic \u2014 callers pass in their own\n * `PublicClient` for the contract reads. No caching here; long-running\n * service consumers should wrap with their own TTL. Mirrors\n * data-gateway/lib/fee-registry.ts byte-for-byte.\n *\n * @category Protocol\n */\nimport { parseAbi, type Address, type Hex, type PublicClient } from \"viem\";\nimport type { DataPortabilityGatewayConfig } from \"./eip712\";\n\nexport const FEE_REGISTRY_ABI = parseAbi([\n  \"struct Fee { uint256 amount; address asset; address payee; bool enabled; }\",\n  \"function fees(bytes32 operation) view returns (Fee)\",\n  \"function operationKey(string name) pure returns (bytes32)\",\n]);\n\nexport type FeeKind =\n  | \"grant_registration\"\n  | \"data_access\"\n  | \"data_registration\"\n  | \"server_registration\"\n  | \"builder_registration\";\n\n/**\n * Map from a user-facing opType (POST /v1/escrow/pay body field, matches\n * the gateway's `payments.op_type` column) to the FeeKind that gates its\n * one-time registration fee.\n *\n * Data access is a per-call surcharge on grants only \u2014 it's not a\n * registration fee for any op, so it lives outside this map.\n */\nexport const REGISTRATION_KIND_FOR_OP: Record<string, FeeKind> = {\n  grant: \"grant_registration\",\n  data: \"data_registration\",\n  server: \"server_registration\",\n  builder: \"builder_registration\",\n};\n\nexport interface FeeEntry {\n  amount: bigint;\n  // Asset the fee is denominated in. 0x0000\u20260000 = native VANA; anything\n  // else is an ERC-20 contract address.\n  asset: Address;\n  // The recipient the on-chain settle pass routes the fee to. Only\n  // meaningful when `enabled` \u2014 disabled fees never land as a SettleOp `to`.\n  payee: Address;\n  enabled: boolean;\n}\n\n/**\n * Compound fee schedule for one op type, mirroring the gateway's\n * lib/op-fees.ts `OpFee`. For ANY op type, `registrationFee` is the\n * one-time fee charged at registration. For `'grant'` only, `dataAccessFee`\n * is the per-access surcharge \u2014 for any other op type it's always 0n with\n * `dataAccessEnabled: false`.\n *\n * `xxxEnabled` reflects the on-chain `Fee.enabled` flag. When OFF, the\n * corresponding amount is 0 and the pay handler should NOT require\n * payment for that kind. When both are off (for a grant) or registration\n * is off (for any other op type), the entire payment flow is skipped \u2014\n * the op settles directly via the no-payment path.\n */\nexport interface OpFee {\n  // Asset for whichever components are enabled. Falls back to native VANA\n  // (0x0) when both components are disabled. The pay handler enforces that\n  // the payer's `asset` matches.\n  asset: Address;\n  registrationFee: bigint;\n  dataAccessFee: bigint;\n  registrationEnabled: boolean;\n  dataAccessEnabled: boolean;\n  // Surfaced for the SDK's on-chain log-filter use case; the gateway's\n  // OpFee type doesn't include these but the SDK keeps them since callers\n  // sizing on-chain assertions need to know where the fee lands. Equal to\n  // the zero address when the corresponding kind is disabled.\n  registrationPayee: Address;\n  dataAccessPayee: Address;\n}\n\nexport interface FeeRegistryOptions {\n  grantRegistrationOpName?: string;\n  dataAccessOpName?: string;\n  dataRegistrationOpName?: string;\n  serverRegistrationOpName?: string;\n  builderRegistrationOpName?: string;\n}\n\nfunction operationNameFor(\n  kind: FeeKind,\n  opts: FeeRegistryOptions | undefined,\n): string {\n  switch (kind) {\n    case \"grant_registration\":\n      return opts?.grantRegistrationOpName ?? \"grant_registration\";\n    case \"data_access\":\n      return opts?.dataAccessOpName ?? \"data_access\";\n    case \"data_registration\":\n      return opts?.dataRegistrationOpName ?? \"data_registration\";\n    case \"server_registration\":\n      return opts?.serverRegistrationOpName ?? \"server_registration\";\n    case \"builder_registration\":\n      return opts?.builderRegistrationOpName ?? \"builder_registration\";\n  }\n}\n\nconst ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000\" as Address;\n\n/**\n * Reads one fee kind from the FeeRegistry. Calls the contract's\n * `operationKey(name)` first to derive the bytes32 key \u2014 matches the\n * gateway's approach exactly (could compute locally via keccak256, but\n * going through the contract eliminates any chance of encoding drift).\n *\n * Returns `{enabled: false}` entries WITHOUT throwing \u2014 disabled is a\n * valid steady state on the gateway. The only validation is the\n * zero-payee check, and that only fires when the fee is enabled\n * (a disabled fee never lands as a SettleOp `to`).\n */\nexport async function getFee(\n  client: PublicClient,\n  config: DataPortabilityGatewayConfig,\n  kind: FeeKind,\n  opts?: FeeRegistryOptions,\n): Promise<FeeEntry> {\n  const address = config.contracts.feeRegistry as Address;\n  const opName = operationNameFor(kind, opts);\n\n  const opKey = (await client.readContract({\n    address,\n    abi: FEE_REGISTRY_ABI,\n    functionName: \"operationKey\",\n    args: [opName],\n  })) as Hex;\n\n  const fee = (await client.readContract({\n    address,\n    abi: FEE_REGISTRY_ABI,\n    functionName: \"fees\",\n    args: [opKey],\n  })) as FeeEntry;\n\n  if (fee.enabled && fee.payee === ZERO_ADDRESS) {\n    throw new Error(\n      `FeeRegistry: enabled operation \"${opName}\" has zero-address payee \u2014 contract pre-flight rejects payouts to 0x0`,\n    );\n  }\n\n  return fee;\n}\n\n/**\n * Convenience: combine the FeeRegistry reads for one op type into the\n * compound shape the pay handler validates against.\n *\n * For 'grant' opType the result includes both registration + data_access\n * components; for other op types data_access is always disabled with\n * amount=0. Disabled components contribute 0 to the signed total \u2014\n * callers compute `amount = registrationFee + dataAccessFee` and the pay\n * handler accepts (or short-circuits with 'Payment not required' when\n * both are 0).\n *\n * Throws on asset mismatch ONLY when both components are enabled \u2014 a\n * disabled fee never lands as a SettleOp, so its asset is moot.\n */\nexport async function getOpFee(\n  client: PublicClient,\n  config: DataPortabilityGatewayConfig,\n  opType: string,\n  opts?: FeeRegistryOptions,\n): Promise<OpFee> {\n  const registrationKind = REGISTRATION_KIND_FOR_OP[opType];\n  if (!registrationKind) {\n    throw new Error(\n      `getOpFee: unknown opType \"${opType}\" \u2014 supported types are ${Object.keys(REGISTRATION_KIND_FOR_OP).join(\", \")}`,\n    );\n  }\n\n  const includeDataAccess = opType === \"grant\";\n  const [registration, dataAccess] = await Promise.all([\n    getFee(client, config, registrationKind, opts),\n    includeDataAccess\n      ? getFee(client, config, \"data_access\", opts)\n      : Promise.resolve<FeeEntry>({\n          amount: 0n,\n          asset: ZERO_ADDRESS,\n          payee: ZERO_ADDRESS,\n          enabled: false,\n        }),\n  ]);\n\n  if (\n    registration.enabled &&\n    dataAccess.enabled &&\n    registration.asset.toLowerCase() !== dataAccess.asset.toLowerCase()\n  ) {\n    throw new Error(\n      `FeeRegistry asset mismatch for \"${opType}\": registration=${registration.asset} vs data_access=${dataAccess.asset}. The gateway requires both kinds to settle in the same asset when both are enabled.`,\n    );\n  }\n\n  const asset = registration.enabled\n    ? registration.asset\n    : dataAccess.enabled\n      ? dataAccess.asset\n      : ZERO_ADDRESS;\n\n  return {\n    asset,\n    registrationFee: registration.enabled ? registration.amount : 0n,\n    dataAccessFee: dataAccess.enabled ? dataAccess.amount : 0n,\n    registrationEnabled: registration.enabled,\n    dataAccessEnabled: dataAccess.enabled,\n    registrationPayee: registration.enabled ? registration.payee : ZERO_ADDRESS,\n    dataAccessPayee: dataAccess.enabled ? dataAccess.payee : ZERO_ADDRESS,\n  };\n}\n", "/**\n * On-chain deposit primitives for the DataPortabilityEscrow contract.\n *\n * The escrow holds the finalized balance that `/v1/escrow/pay` debits against.\n * A payer credits their balance by sending one of two function calls to the\n * escrow contract \u2014 depositNative (native VANA, amount via `msg.value`) or\n * depositToken (ERC-20, caller must `approve` the escrow first). The credited\n * `account` need not equal `msg.sender`, so a third party can fund someone\n * else's escrow.\n *\n * Once the on-chain tx lands, call `GatewayClient.submitEscrowDeposit({txHash})`\n * to announce it; the gateway reconciles it into the balance and surfaces it\n * under `getEscrowBalance(account).deposits.finalized`.\n *\n * These helpers are signer/transport-agnostic \u2014 they return the raw\n * `{to, data, value?}` request object so callers can feed it to any wallet\n * stack (viem `sendTransaction`/`writeContract`, ethers, wallet-rpc, MPC,\n * Safe transactions, etc.).\n *\n * @category Protocol\n */\nimport { encodeFunctionData } from \"viem\";\nimport type { DataPortabilityGatewayConfig } from \"./eip712\";\n\n// ABI for the two deposit entry points on DataPortabilityEscrow. Same shape\n// the gateway uses to decode pending/mined tx calldata at\n// /v1/escrow/deposit time (data-gateway/lib/escrow.ts:39).\nexport const ESCROW_DEPOSIT_ABI = [\n  {\n    type: \"function\",\n    name: \"depositNative\",\n    stateMutability: \"payable\",\n    inputs: [{ name: \"account\", type: \"address\" }],\n    outputs: [],\n  },\n  {\n    type: \"function\",\n    name: \"depositToken\",\n    stateMutability: \"nonpayable\",\n    inputs: [\n      { name: \"account\", type: \"address\" },\n      { name: \"token\", type: \"address\" },\n      { name: \"amount\", type: \"uint256\" },\n    ],\n    outputs: [],\n  },\n] as const;\n\nexport function escrowContractAddress(\n  config: DataPortabilityGatewayConfig,\n): `0x${string}` {\n  return config.contracts.dataPortabilityEscrow as `0x${string}`;\n}\n\nexport interface DepositNativeInput {\n  // Address credited inside the escrow. Often the same as the wallet sending\n  // the tx, but third-party funding is supported.\n  account: `0x${string}`;\n  amount: bigint;\n}\n\nexport interface DepositTokenInput {\n  account: `0x${string}`;\n  // ERC-20 contract address.\n  token: `0x${string}`;\n  amount: bigint;\n}\n\n// Shape compatible with viem's `sendTransaction` / `writeContract` request\n// objects. `value` is omitted on the ERC-20 path because the amount lives in\n// the token contract, not `msg.value`.\nexport interface DepositTransactionRequest {\n  to: `0x${string}`;\n  data: `0x${string}`;\n  value?: bigint;\n}\n\nexport function encodeDepositNativeData(input: {\n  account: `0x${string}`;\n}): `0x${string}` {\n  return encodeFunctionData({\n    abi: ESCROW_DEPOSIT_ABI,\n    functionName: \"depositNative\",\n    args: [input.account],\n  });\n}\n\nexport function encodeDepositTokenData(\n  input: DepositTokenInput,\n): `0x${string}` {\n  return encodeFunctionData({\n    abi: ESCROW_DEPOSIT_ABI,\n    functionName: \"depositToken\",\n    args: [input.account, input.token, input.amount],\n  });\n}\n\n// Build the full tx request for a native-VANA deposit. Feed it straight to\n// `walletClient.sendTransaction({...req, account, chain})`. ERC-20 needs a\n// prior `approve(escrow, amount)` on the token \u2014 use viem's built-in\n// `erc20Abi` for that; the SDK doesn't bundle one to avoid the import surface.\nexport function buildDepositNativeRequest(\n  config: DataPortabilityGatewayConfig,\n  input: DepositNativeInput,\n): DepositTransactionRequest {\n  return {\n    to: escrowContractAddress(config),\n    data: encodeDepositNativeData({ account: input.account }),\n    value: input.amount,\n  };\n}\n\nexport function buildDepositTokenRequest(\n  config: DataPortabilityGatewayConfig,\n  input: DepositTokenInput,\n): DepositTransactionRequest {\n  return {\n    to: escrowContractAddress(config),\n    data: encodeDepositTokenData(input),\n  };\n}\n", "/**\n * On-chain status mutation primitives for DataRegistryV2 data points.\n *\n * The v2 contract drops the file concept in favor of versioned data points\n * keyed on (owner, scope). Each data point has a lifecycle Status that the\n * owner can change directly \u2014 there's no EIP-712 signature flow and no\n * gateway endpoint that mediates this, because the contract enforces\n * `msg.sender == owner` for `setStatus`. The owner therefore has to sign\n * and broadcast the tx from their own wallet.\n *\n * These helpers are signer/transport-agnostic \u2014 they return the raw\n * `{to, data}` request object so callers can feed it to any wallet stack\n * (viem `sendTransaction`/`writeContract`, ethers, wallet-rpc, MPC,\n * Safe transactions, etc.). Mirrors the shape used by `escrow-deposit.ts`.\n *\n * @category Protocol\n */\nimport { encodeFunctionData } from \"viem\";\nimport type { DataPortabilityGatewayConfig } from \"./eip712\";\n\n// Lifecycle states from IDataRegistryV2.Status. Wire encoding is uint8.\n// - None: no data point exists for this (owner, scope).\n// - Active: has data, served on /v1/escrow/pay's recordDataAccess path.\n// - Inactive: owner-paused \u2014 refuses new versions until re-activated.\n//   `addData` (or addDataWithSignature) auto-revives Inactive \u2192 Active.\n// - Unavailable: terminal soft-delete \u2014 `addData` and recordDataAccess both\n//   revert. The owner can still resurrect by calling setStatus(Active), but\n//   that signals intent to bring the data point back online; a downstream\n//   client treating Unavailable as a delete tombstone should re-fetch after\n//   any DataPointStatusChanged event.\nexport enum DataPointStatus {\n  None = 0,\n  Active = 1,\n  Inactive = 2,\n  Unavailable = 3,\n}\n\n// Minimal ABI fragment for the owner-only `setStatus(scope, newStatus)`\n// entry point. Kept inline so callers don't have to load the full contract\n// ABI just to change a status.\nexport const DATA_REGISTRY_STATUS_ABI = [\n  {\n    type: \"function\",\n    name: \"setStatus\",\n    stateMutability: \"nonpayable\",\n    inputs: [\n      { name: \"scope\", type: \"string\" },\n      { name: \"newStatus\", type: \"uint8\" },\n    ],\n    outputs: [],\n  },\n] as const;\n\nexport function dataRegistryContractAddress(\n  config: DataPortabilityGatewayConfig,\n): `0x${string}` {\n  return config.contracts.dataRegistry as `0x${string}`;\n}\n\nexport interface SetDataPointStatusInput {\n  scope: string;\n  status: DataPointStatus;\n}\n\n// Shape compatible with viem's `sendTransaction` / `writeContract` request\n// objects. No `value` \u2014 `setStatus` is non-payable.\nexport interface DataPointStatusTransactionRequest {\n  to: `0x${string}`;\n  data: `0x${string}`;\n}\n\nexport function encodeSetDataPointStatusData(\n  input: SetDataPointStatusInput,\n): `0x${string}` {\n  return encodeFunctionData({\n    abi: DATA_REGISTRY_STATUS_ABI,\n    functionName: \"setStatus\",\n    args: [input.scope, input.status],\n  });\n}\n\n// Build the full tx request for a status change. Feed straight to\n// `walletClient.sendTransaction({...req, account, chain})`. The caller's\n// `account` MUST equal the data point's owner \u2014 the contract reverts\n// otherwise.\nexport function buildSetDataPointStatusRequest(\n  config: DataPortabilityGatewayConfig,\n  input: SetDataPointStatusInput,\n): DataPointStatusTransactionRequest {\n  return {\n    to: dataRegistryContractAddress(config),\n    data: encodeSetDataPointStatusData(input),\n  };\n}\n\n// Convenience for the \"remove this data point\" intent \u2014 the v2 equivalent\n// of the old DELETE /v1/files/:id flow. Sets the status to Unavailable so\n// downstream readers (recordDataAccess, future addData) revert. Callers\n// that want the data point pausable rather than tombstoned should use\n// `buildSetDataPointStatusRequest` with `DataPointStatus.Inactive`.\nexport function buildMarkDataPointUnavailableRequest(\n  config: DataPortabilityGatewayConfig,\n  input: { scope: string },\n): DataPointStatusTransactionRequest {\n  return buildSetDataPointStatusRequest(config, {\n    scope: input.scope,\n    status: DataPointStatus.Unavailable,\n  });\n}\n", "/**\n * Data point deletion (tombstone) helpers for DataRegistryV2.\n *\n * A deletion is an owner-signed `AddData` for version `current + 1` whose\n * `dataHash` / `metadataHash` are the protocol-wide tombstone constants below.\n * The gateway records the tombstone version and marks the row `deletedAt`;\n * the encrypted blobs in vana-storage are removed afterwards as a best-effort\n * follow-up. The tombstone is the durable fact; blob removal is cleanup.\n *\n * The typed-data definition is exactly {@link ADD_DATA_TYPES} against\n * {@link dataRegistryDomain} -- the same signature the registration path uses,\n * so a verifier cannot tell a deletion apart from a registration except by\n * the hashes.\n *\n * @category Protocol\n */\n\nimport {\n  isAddress,\n  keccak256,\n  maxUint256,\n  stringToBytes,\n  type Account,\n  type Address,\n  type Hex,\n  type TypedDataDefinition,\n} from \"viem\";\nimport { DataPointDeletedError, DataPointNotFoundError } from \"../errors\";\nimport { isPlainObject } from \"../utils/response-body\";\nimport {\n  ADD_DATA_TYPES,\n  dataRegistryDomain,\n  type AddDataMessage,\n  type DataPortabilityGatewayConfig,\n} from \"./eip712\";\nimport type {\n  DeleteDataPointResult as GatewayDeleteDataPointResult,\n  GatewayClient,\n} from \"./gateway\";\nimport { deriveDataPointId } from \"./lineage\";\n\n/** UTF-8 preimage of {@link TOMBSTONE_DATA_HASH}. */\nexport const TOMBSTONE_DATA_HASH_PREIMAGE = \"vana.data-point.tombstone.v1\";\n/** UTF-8 preimage of {@link TOMBSTONE_METADATA_HASH}. */\nexport const TOMBSTONE_METADATA_HASH_PREIMAGE =\n  \"vana.data-point.tombstone.metadata.v1\";\n\n/**\n * `keccak256(utf8(\"vana.data-point.tombstone.v1\"))` -- the `dataHash` a\n * deletion AddData carries. Single source of truth shared with the gateway\n * and Personal Server; never change without a new `.vN` preimage.\n */\nexport const TOMBSTONE_DATA_HASH =\n  \"0x30c45ee72fe56d1927701316925ab7ceacd3b6f9267061735d59396f075c6222\" as const;\n\n/**\n * `keccak256(utf8(\"vana.data-point.tombstone.metadata.v1\"))` -- the\n * `metadataHash` a deletion AddData carries.\n */\nexport const TOMBSTONE_METADATA_HASH =\n  \"0xc5255a141acd6a2ae55971b62c0a85977c2511989dc114ad2abc2b7644f57d90\" as const;\n\n/**\n * Recompute a tombstone hash from its preimage. Exposed so tests and\n * downstream services can prove the pinned constants match the contract.\n */\nexport function computeTombstoneHash(preimage: string): Hex {\n  return keccak256(stringToBytes(preimage));\n}\n\n/** True when the pair of hashes is exactly the tombstone pair. */\nexport function isTombstoneHashes(\n  dataHash: string | undefined,\n  metadataHash: string | undefined,\n): boolean {\n  return (\n    typeof dataHash === \"string\" &&\n    typeof metadataHash === \"string\" &&\n    dataHash.toLowerCase() === TOMBSTONE_DATA_HASH &&\n    metadataHash.toLowerCase() === TOMBSTONE_METADATA_HASH\n  );\n}\n\n/**\n * Detect a deleted data point from any record-shaped value: a non-null\n * `deletedAt`, or the tombstone hash pair. Accepts `unknown` so read\n * helpers can run it on a raw JSON body before trusting the payload.\n */\nexport function isDataPointTombstone(value: unknown): boolean {\n  if (!isPlainObject(value)) return false;\n  if (typeof value[\"deletedAt\"] === \"string\") return true;\n  return isTombstoneHashes(\n    typeof value[\"dataHash\"] === \"string\" ? value[\"dataHash\"] : undefined,\n    typeof value[\"metadataHash\"] === \"string\"\n      ? value[\"metadataHash\"]\n      : undefined,\n  );\n}\n\n/**\n * Read `deletedAt` off any value a gateway or Personal Server might hand\n * back (a record, an error body, `null`, an array, ...). Returns `null`\n * unless it is a string, so every `DataPointDeletedError` carries the same\n * `deletedAt` semantics regardless of which read path raised it.\n */\nexport function tombstoneDeletedAt(value: unknown): string | null {\n  if (!isPlainObject(value)) return null;\n  const deletedAt = value[\"deletedAt\"];\n  return typeof deletedAt === \"string\" ? deletedAt : null;\n}\n\nexport type DataPointDeletionTypedData = TypedDataDefinition<\n  typeof ADD_DATA_TYPES,\n  \"AddData\"\n> & {\n  message: AddDataMessage;\n};\n\nexport interface DataPointDeletionSigner {\n  /** The data point owner. Must match `AddData.ownerAddress`. */\n  address: Address;\n  signTypedData(typedData: DataPointDeletionTypedData): Promise<Hex> | Hex;\n}\n\nexport interface ViemDataPointDeletionWalletClient {\n  account?: Account | Address | null;\n  signTypedData(\n    typedData: DataPointDeletionTypedData & { account?: Account | Address },\n  ): Promise<Hex>;\n}\n\nexport type ViemDataPointDeletionSignerSource =\n  | DataPointDeletionSigner\n  | ViemDataPointDeletionWalletClient;\n\nexport interface BuildDataPointDeletionTypedDataInput {\n  ownerAddress: Address;\n  scope: string;\n  /**\n   * The version the tombstone is written at -- `current + 1`. This is the\n   * `AddData.expectedVersion` field; the gateway rejects with 409 unless it\n   * is strictly greater than the stored version.\n   */\n  expectedVersion: bigint;\n  config: DataPortabilityGatewayConfig;\n}\n\nexport interface BuildDataPointDeletionSignatureInput {\n  signer: DataPointDeletionSigner;\n  scope: string;\n  /** See {@link BuildDataPointDeletionTypedDataInput.expectedVersion}. */\n  expectedVersion: bigint;\n  config: DataPortabilityGatewayConfig;\n}\n\nexport interface DataPointDeletionSignature {\n  signature: Hex;\n  signerAddress: Address;\n  typedData: DataPointDeletionTypedData;\n}\n\nfunction assertAddress(value: string, name: string): void {\n  if (!isAddress(value)) {\n    throw new Error(`${name} must be a valid EVM address`);\n  }\n}\n\n// `AddData.expectedVersion` is a uint256 on the contract. A bigint has no\n// such bound, so every version the SDK signs or increments is checked here\n// rather than trusting the TypeScript type.\nfunction assertUint256(value: bigint, name: string): void {\n  if (value < 0n || value > maxUint256) {\n    throw new Error(`${name} must fit in uint256, got ${value}`);\n  }\n}\n\nfunction getAccountAddress(\n  account: Account | Address | null | undefined,\n): Address | undefined {\n  if (!account) return undefined;\n  return typeof account === \"string\" ? account : account.address;\n}\n\nfunction isDataPointDeletionSigner(\n  source: ViemDataPointDeletionSignerSource,\n): source is DataPointDeletionSigner {\n  return \"address\" in source && typeof source.signTypedData === \"function\";\n}\n\n/**\n * Adapt a viem local account or wallet client to\n * {@link DataPointDeletionSigner}. Mirrors\n * `createViemPersonalServerRegistrationSigner`.\n */\nexport function createViemDataPointDeletionSigner(\n  source: ViemDataPointDeletionSignerSource,\n  options: { account?: Account | Address } = {},\n): DataPointDeletionSigner {\n  if (isDataPointDeletionSigner(source)) {\n    return source;\n  }\n\n  const accountAddress =\n    getAccountAddress(options.account) ?? getAccountAddress(source.account);\n\n  if (accountAddress) {\n    return {\n      address: accountAddress,\n      signTypedData: (typedData) =>\n        source.signTypedData({\n          ...typedData,\n          account: options.account ?? source.account ?? accountAddress,\n        }),\n    };\n  }\n\n  throw new Error(\n    \"Viem wallet client requires an account option or account property\",\n  );\n}\n\n/**\n * Build the exact `AddData` typed data a deletion signs: the tombstone hash\n * pair at `expectedVersion`, against the DataRegistryV2 domain.\n */\nexport function buildDataPointDeletionTypedData(\n  input: BuildDataPointDeletionTypedDataInput,\n): DataPointDeletionTypedData {\n  assertAddress(input.ownerAddress, \"ownerAddress\");\n  if (input.scope.length === 0) {\n    throw new Error(\"scope must be a non-empty string\");\n  }\n  if (input.expectedVersion <= 0n) {\n    throw new Error(\"expectedVersion must be a positive version number\");\n  }\n  assertUint256(input.expectedVersion, \"expectedVersion\");\n\n  return {\n    domain: dataRegistryDomain(input.config),\n    types: ADD_DATA_TYPES,\n    primaryType: \"AddData\",\n    message: {\n      ownerAddress: input.ownerAddress,\n      scope: input.scope,\n      dataHash: TOMBSTONE_DATA_HASH,\n      metadataHash: TOMBSTONE_METADATA_HASH,\n      expectedVersion: input.expectedVersion,\n    },\n  };\n}\n\n/** Sign a deletion `AddData` with the owner's signer. */\nexport async function buildDataPointDeletionSignature(\n  input: BuildDataPointDeletionSignatureInput,\n): Promise<DataPointDeletionSignature> {\n  const typedData = buildDataPointDeletionTypedData({\n    ownerAddress: input.signer.address,\n    scope: input.scope,\n    expectedVersion: input.expectedVersion,\n    config: input.config,\n  });\n  const signature = await input.signer.signTypedData(typedData);\n\n  return {\n    signature,\n    signerAddress: input.signer.address,\n    typedData,\n  };\n}\n\n/**\n * Outcome of a scope-wide blob delete. `VanaStorage.deleteScope` returns a\n * superset of this shape.\n */\nexport interface DataPointBlobDeleteResult {\n  count: number;\n  totalBytes: number;\n}\n\n/**\n * The storage half of a deletion -- structurally satisfied by `VanaStorage`.\n * Removes every version's blob under `(owner, scope)`.\n */\nexport interface DataPointBlobStore {\n  deleteScope(\n    ownerAddress: Address,\n    scope: string,\n  ): Promise<DataPointBlobDeleteResult>;\n}\n\nexport interface DeleteDataPointInput {\n  /** Gateway client -- only `getDataPoint` and `deleteDataPoint` are used. */\n  gateway: Pick<GatewayClient, \"getDataPoint\" | \"deleteDataPoint\">;\n  /** Blob store for the best-effort cleanup after the tombstone lands. */\n  storage: DataPointBlobStore;\n  /** Owner signer. `signer.address` is the data point owner. */\n  signer: DataPointDeletionSigner;\n  scope: string;\n  config: DataPortabilityGatewayConfig;\n  /**\n   * Skip the gateway lookup and treat this as the current version. Use when\n   * the caller already holds a fresh `DataPointRecord.expectedVersion`;\n   * omit to let the SDK fetch it.\n   */\n  currentVersion?: bigint;\n}\n\ninterface DataPointDeletionBase {\n  dataPointId: Hex;\n  ownerAddress: Address;\n  scope: string;\n  /** Decimal-string uint256 of the tombstone version (`current + 1`). */\n  version: string;\n  signature: Hex;\n  /** The gateway's 200 body for the tombstone. */\n  tombstone: GatewayDeleteDataPointResult;\n}\n\n/** Both the gateway tombstone and the blob cleanup succeeded. */\nexport interface DataPointDeletedResult extends DataPointDeletionBase {\n  status: \"deleted\";\n  storage: DataPointBlobDeleteResult;\n}\n\n/**\n * The gateway recorded the tombstone (durable, the data point is deleted)\n * but the blob cleanup failed. Retry `storage.deleteScope(owner, scope)`\n * later; the tombstone does not need to be re-signed.\n */\nexport interface DataPointDeletionPartialResult extends DataPointDeletionBase {\n  status: \"partial\";\n  storageError: Error;\n}\n\nexport type DataPointDeletionResult =\n  | DataPointDeletedResult\n  | DataPointDeletionPartialResult;\n\nfunction toError(value: unknown): Error {\n  return value instanceof Error ? value : new Error(String(value));\n}\n\n// The wire type says decimal-string uint256, but the type system cannot\n// enforce that at runtime: refuse anything else here rather than letting\n// `BigInt()` throw a bare SyntaxError (or, worse, sign for a bogus version).\nfunction parseExpectedVersion(value: unknown): bigint {\n  if (typeof value !== \"string\" || !/^\\d+$/.test(value)) {\n    throw new Error(\n      `Gateway returned a malformed expectedVersion: ${JSON.stringify(value)}`,\n    );\n  }\n  const parsed = BigInt(value);\n  assertUint256(parsed, \"Gateway expectedVersion\");\n  return parsed;\n}\n\n/**\n * Delete a data point end to end. Symmetric with `registerDataPoint`.\n *\n * Order, deliberately:\n *   1. fetch the current version from the gateway (unless supplied),\n *   2. sign the tombstone `AddData` for `current + 1`,\n *   3. `DELETE /v1/data/:dataPointId` on the gateway,\n *   4. delete every blob under `(owner, scope)` in vana-storage.\n *\n * Steps 1-3 throw on failure ({@link DataPointNotFoundError},\n * {@link DataPointDeletedError}, `DataPointVersionConflictError`, or a\n * generic gateway error). A step-4 failure does NOT throw: the tombstone is\n * already the durable fact, so the result comes back with\n * `status: \"partial\"` and the storage error attached.\n */\nexport async function deleteDataPoint(\n  input: DeleteDataPointInput,\n): Promise<DataPointDeletionResult> {\n  const ownerAddress = input.signer.address;\n  const dataPointId = deriveDataPointId(ownerAddress, input.scope);\n\n  let currentVersion = input.currentVersion;\n  if (currentVersion === undefined) {\n    const record = await input.gateway.getDataPoint(dataPointId);\n    if (record === null) {\n      throw new DataPointNotFoundError(\n        `No data point registered for scope '${input.scope}' owned by ${ownerAddress}`,\n        { dataPointId, scope: input.scope, ownerAddress },\n      );\n    }\n    if (isDataPointTombstone(record)) {\n      throw new DataPointDeletedError(\n        `Data point ${dataPointId} (scope '${input.scope}') is already deleted`,\n        {\n          dataPointId,\n          scope: input.scope,\n          ownerAddress,\n          deletedAt: tombstoneDeletedAt(record),\n        },\n      );\n    }\n    currentVersion = parseExpectedVersion(record.expectedVersion);\n  }\n\n  // Whichever source supplied it, `current + 1` must itself be a uint256:\n  // a negative current version would sign for 0 or wrap, and\n  // 2^256 - 1 cannot be incremented at all.\n  if (currentVersion < 0n || currentVersion >= maxUint256) {\n    throw new Error(\n      `currentVersion ${currentVersion} cannot be incremented to a uint256 tombstone version`,\n    );\n  }\n  const tombstoneVersion = currentVersion + 1n;\n  const signed = await buildDataPointDeletionSignature({\n    signer: input.signer,\n    scope: input.scope,\n    expectedVersion: tombstoneVersion,\n    config: input.config,\n  });\n\n  const tombstone = await input.gateway.deleteDataPoint({\n    ownerAddress,\n    scope: input.scope,\n    expectedVersion: tombstoneVersion.toString(),\n    signature: signed.signature,\n  });\n\n  const base: DataPointDeletionBase = {\n    dataPointId,\n    ownerAddress,\n    scope: input.scope,\n    version: tombstoneVersion.toString(),\n    signature: signed.signature,\n    tombstone,\n  };\n\n  try {\n    const storage = await input.storage.deleteScope(ownerAddress, input.scope);\n    return { ...base, status: \"deleted\", storage };\n  } catch (cause) {\n    return { ...base, status: \"partial\", storageError: toError(cause) };\n  }\n}\n", "/**\n * Derivative lineage: which data points a record was derived from, and which\n * records were derived from it.\n *\n * @remarks\n * A data point is addressed by `keccak256(abi.encode(address owner, string\n * scope))` ({@link deriveDataPointId}). A builder writing a derivative names\n * its sources through the `lineage` option of {@link writeData}; the Personal\n * Server stores them under the reserved `$lineage` key and both the Personal\n * Server (`GET /v1/data/:scope/lineage[/:version]`) and the gateway\n * (`GET /v1/data/:dataPointId/lineage[/:version]`) answer the resulting view.\n * Nodes the caller holds no grant for come back as exactly\n * `{ redacted: true }`: no id, scope or version, because the id is\n * `keccak256(owner, scope)` and a grantee who knows the owner could recover\n * the scope from it with a small dictionary. Order and count are preserved,\n * so a redacted node is still identified by its position. A source that no\n * longer resolves comes back with `version: \"0\"`.\n *\n * A derived scope must not share its first dot-segment with any source scope\n * (a grant on `chatgpt.*` must never read a derivative of\n * `chatgpt.conversations`): see {@link assertDerivedScopeNaming}.\n *\n * @category Protocol\n */\n\nimport {\n  encodeAbiParameters,\n  isAddress,\n  keccak256,\n  type Address,\n  type Hex,\n} from \"viem\";\nimport { z } from \"zod\";\nimport { buildWeb3SignedHeader } from \"../auth/web3-signed-builder\";\nimport { LineageReadError, WriteRequestError } from \"../errors\";\nimport {\n  isRecord,\n  readPersonalServerErrorBody,\n} from \"./personal-server-error-body\";\nimport {\n  resolveWriteSigner,\n  type ResolveWriteSignerOptions,\n  type WriteSignerSource,\n} from \"./write-signer\";\n\nconst DATA_POINT_ID_PATTERN = /^0x[0-9a-fA-F]{64}$/;\n\n/** `true` when `value` is a 32-byte hex data point id. */\nexport function isDataPointId(value: unknown): value is Hex {\n  return typeof value === \"string\" && DATA_POINT_ID_PATTERN.test(value);\n}\n\n/**\n * Derive the DataRegistryV2 data point id for an owner and scope:\n * `keccak256(abi.encode(address ownerAddress, string scope))`.\n *\n * @param ownerAddress - The data owner (the Personal Server owner).\n * @param scope - The scope the data point is stored under.\n * @returns The 32-byte id, lowercase hex.\n * @throws Error when `ownerAddress` is not an EVM address.\n */\nexport function deriveDataPointId(ownerAddress: Address, scope: string): Hex {\n  if (!isAddress(ownerAddress, { strict: false })) {\n    throw new Error(\n      `ownerAddress is not an EVM address: ${String(ownerAddress)}`,\n    );\n  }\n  return keccak256(\n    encodeAbiParameters(\n      [\n        { name: \"ownerAddress\", type: \"address\" },\n        { name: \"scope\", type: \"string\" },\n      ],\n      [ownerAddress, scope],\n    ),\n  );\n}\n\nconst DataPointIdSchema = z\n  .string()\n  .regex(DATA_POINT_ID_PATTERN)\n  .transform((value) => value.toLowerCase() as Hex);\n\nconst VERSION_PATTERN = /^[1-9]\\d*$/;\nconst NODE_VERSION_PATTERN = /^(0|[1-9]\\d*)$/;\n\n// Versions are decimal integers, strings on the wire; a numeric value is\n// normalised to the same representation. A node's version may be \"0\": a\n// source that no longer resolves to a registered data point.\nconst VersionSchema = z\n  .union([z.string(), z.number()])\n  .transform(String)\n  .refine((value) => NODE_VERSION_PATTERN.test(value), {\n    message: \"version must be a decimal integer\",\n  });\n// The view's own version is a registered one: always positive.\nconst ViewVersionSchema = VersionSchema.refine(\n  (value) => VERSION_PATTERN.test(value),\n  { message: \"version must be a positive decimal integer\" },\n);\n\n/** First dot-segment of a scope (`chatgpt` for `chatgpt.conversations`). */\nexport function scopeNamespace(scope: string): string {\n  const dot = scope.indexOf(\".\");\n  return dot === -1 ? scope : scope.slice(0, dot);\n}\n\n/**\n * The naming rule: a derived scope and a source scope must not share their\n * first dot-segment, because a `prefix.*` grant would then cover both and\n * leak across the lineage edge. Mirrors the Personal Server's check\n * (`LINEAGE_SCOPE_UNDER_SOURCE_PREFIX`).\n */\nexport function derivedScopeViolatesNaming(\n  derivedScope: string,\n  sourceScope: string,\n): boolean {\n  return scopeNamespace(derivedScope) === scopeNamespace(sourceScope);\n}\n\n/**\n * Throw when `derivedScope` shares its first dot-segment with any source\n * scope (see {@link derivedScopeViolatesNaming}).\n *\n * @throws {WriteRequestError} Naming the offending source scope in `details`.\n */\nexport function assertDerivedScopeNaming(\n  derivedScope: string,\n  sourceScopes: readonly string[],\n): void {\n  for (const sourceScope of sourceScopes) {\n    if (derivedScopeViolatesNaming(derivedScope, sourceScope)) {\n      throw new WriteRequestError(\n        `Derived scope ${derivedScope} must not share its first segment with source scope ${sourceScope}; put derivatives in the app's own namespace`,\n        { scope: derivedScope, sourceScope },\n      );\n    }\n  }\n}\n\nexport const LineageNodeSchema = z.object({\n  dataPointId: DataPointIdSchema,\n  scope: z.string(),\n  /**\n   * The node's current version, decimal string; `\"0\"` for a source that no\n   * longer resolves to a registered data point.\n   */\n  version: VersionSchema,\n  /** The node's tombstone time, or `null` when live. */\n  deletedAt: z.string().nullable(),\n  /**\n   * Never present on a visible node. Declared so a node that carries\n   * `redacted: true` next to an id, scope and version cannot slip through\n   * this branch of {@link LineageEntrySchema} with the key stripped.\n   */\n  redacted: z.never().optional(),\n});\n\n/**\n * A redacted node is exactly `{ redacted: true }`. Any other key on it would\n * leak what the redaction hides, so the schema is strict: a view carrying a\n * redacted node with an id (or anything else) is refused rather than passed\n * through.\n */\nexport const RedactedLineageNodeSchema = z.strictObject({\n  redacted: z.literal(true),\n});\n\nexport const LineageEntrySchema = z.union([\n  RedactedLineageNodeSchema,\n  LineageNodeSchema,\n]);\n\nexport const LineageGraphSchema = z.object({\n  dataPointId: DataPointIdSchema,\n  /** The data point owner; every node in the view belongs to it. */\n  ownerAddress: z.string().optional(),\n  scope: z.string(),\n  /**\n   * The derived record's version whose lineage is shown: the requested one,\n   * else the current one, else (current is a tombstone) the last version\n   * that carried lineage.\n   */\n  version: ViewVersionSchema,\n  deletedAt: z.string().nullable(),\n  sources: z.array(LineageEntrySchema),\n  derivatives: z.array(LineageEntrySchema),\n  /** `true` when `derivatives` was cut at the server's cap (1000). */\n  derivativesTruncated: z.boolean().optional(),\n});\n\n/** A lineage node the caller is allowed to see. */\nexport type LineageNode = z.infer<typeof LineageNodeSchema>;\n\n/** A lineage node the caller holds no grant for: nothing but its position. */\nexport type RedactedLineageNode = z.infer<typeof RedactedLineageNodeSchema>;\n\n/** One entry of a lineage graph. Narrow with {@link isRedactedLineageNode}. */\nexport type LineageEntry = z.infer<typeof LineageEntrySchema>;\n\n/** The lineage view of one data point (the `data` of the response). */\nexport type LineageGraph = z.infer<typeof LineageGraphSchema>;\n\n/** A lineage read: the view plus the gateway's attestation over it. */\nexport interface LineageReadResult extends LineageGraph {\n  /**\n   * The gateway `proof` (`GatewayAttestation` over the served view, so a\n   * redacted view verifies on its own). Passed through as received; absent\n   * when the server sent none.\n   */\n  proof?: Record<string, unknown>;\n}\n\n/** `true` when the entry was redacted (the caller holds no grant for it). */\nexport function isRedactedLineageNode(\n  entry: LineageEntry,\n): entry is RedactedLineageNode {\n  return (\n    \"redacted\" in entry &&\n    entry.redacted === true &&\n    Object.keys(entry).length === 1\n  );\n}\n\n/**\n * The Personal Server lineage path: `/v1/data/:scope/lineage[/:version]`.\n * The version is a path segment (a query string is refused by the server),\n * so the signed `uri` covers the whole request.\n */\nexport function personalServerLineagePath(\n  scope: string,\n  version?: string | number,\n): string {\n  return `/v1/data/${encodeURIComponent(scope)}/lineage${version === undefined ? \"\" : `/${String(version)}`}`;\n}\n\n/**\n * The gateway lineage path: `/v1/data/<id lowercase>/lineage[/:version]`,\n * what the request is signed over and sent to. The grant view is the signed\n * `grantId` claim, never a query parameter.\n */\nexport function gatewayLineagePath(\n  dataPointId: Hex,\n  version?: string | number,\n): string {\n  return `/v1/data/${dataPointId.toLowerCase()}/lineage${version === undefined ? \"\" : `/${String(version)}`}`;\n}\n\ninterface LineageRequestOptions {\n  /**\n   * Read the lineage as of this version (a positive decimal integer);\n   * omitted = the current version, or the last version that carried lineage\n   * when the current one is a tombstone.\n   */\n  version?: string | number;\n  /** `fetch` to use; defaults to `globalThis.fetch`. */\n  fetch?: typeof fetch;\n  /** Extra request headers. */\n  headers?: HeadersInit;\n}\n\n/** Lineage read against the Personal Server holding the record. */\nexport interface PersonalServerLineageParams extends LineageRequestOptions {\n  /** Personal Server origin, e.g. `https://ps.example.com`. */\n  personalServerUrl: string;\n  /** The scope whose lineage to read. */\n  scope: string;\n  /** A grant covering the scope, sent as the signed `grantId` claim. */\n  grantId: string;\n  /** Builder key: a viem `LocalAccount`, `WalletClient`, or `{ signMessage }`. */\n  signer: WriteSignerSource;\n  /** Account for a viem wallet client without a hoisted account. */\n  account?: ResolveWriteSignerOptions[\"account\"];\n  /** Web3Signed audience; defaults to `personalServerUrl`. */\n  audience?: string;\n}\n\n/** Lineage read against the gateway, by data point id. */\nexport interface GatewayLineageParams extends LineageRequestOptions {\n  /** Gateway origin, e.g. `https://dp-rpc.vana.org`. */\n  gatewayUrl: string;\n  /** The data point whose lineage to read (see {@link deriveDataPointId}). */\n  dataPointId: Hex;\n  /**\n   * The key the request is signed with (Web3Signed, audience = the gateway\n   * origin). The signer decides the view: the owner or one of its servers\n   * gets the full view; a registered builder holding a live grant covering\n   * the data point's scope gets that grant's view; anyone else is refused.\n   */\n  signer: WriteSignerSource;\n  /** Account for a viem wallet client without a hoisted account. */\n  account?: ResolveWriteSignerOptions[\"account\"];\n  /**\n   * The grant whose view to read, sent lowercased as the signed `grantId`\n   * claim (never as a query parameter). An owner or server uses it to fetch\n   * the view a builder's grant sees; a builder needs it to see anything.\n   */\n  grantId?: string;\n}\n\nexport type GetLineageParams =\n  | PersonalServerLineageParams\n  | GatewayLineageParams;\n\nfunction normalizeBaseUrl(url: string): string {\n  return url.replace(/\\/+$/, \"\");\n}\n\nfunction resolveFetch(fetchFn: typeof fetch | undefined): typeof fetch {\n  const resolved = fetchFn ?? globalThis.fetch;\n  if (resolved === undefined) {\n    throw new LineageReadError(\"No fetch implementation available\");\n  }\n  return resolved;\n}\n\nfunction normalizeVersion(\n  version: string | number | undefined,\n): string | undefined {\n  if (version === undefined) return undefined;\n  const text = String(version);\n  if (!VERSION_PATTERN.test(text)) {\n    throw new LineageReadError(\n      \"version must be a positive decimal integer\",\n      undefined,\n      \"INVALID_VERSION\",\n      { version },\n    );\n  }\n  return text;\n}\n\nasync function lineageReadFailure(\n  source: string,\n  response: Response,\n): Promise<LineageReadError> {\n  const { errorCode, message, details } =\n    await readPersonalServerErrorBody(response);\n  return new LineageReadError(\n    message ??\n      `${source} lineage read failed: ${response.status} ${response.statusText}`,\n    response.status,\n    errorCode,\n    details,\n  );\n}\n\nasync function parseLineageGraph(\n  source: string,\n  response: Response,\n): Promise<LineageReadResult> {\n  let body: unknown;\n  try {\n    body = await response.json();\n  } catch (err) {\n    throw new LineageReadError(\n      `${source} lineage response is not JSON`,\n      response.status,\n      null,\n      { cause: err instanceof Error ? err.message : String(err) },\n    );\n  }\n  // Both servers answer the gateway envelope `{ data, proof }`; a bare view\n  // is accepted too.\n  const envelope = isRecord(body) && isRecord(body.data) ? body : undefined;\n  const parsed = LineageGraphSchema.safeParse(envelope?.data ?? body);\n  if (!parsed.success) {\n    throw new LineageReadError(\n      `${source} lineage response is not a lineage view`,\n      response.status,\n      null,\n      { issues: parsed.error.issues },\n    );\n  }\n  const proof = isRecord(envelope?.proof) ? envelope.proof : undefined;\n  return proof === undefined ? parsed.data : { ...parsed.data, proof };\n}\n\nasync function sendLineageRead(\n  source: string,\n  fetchFn: typeof fetch,\n  url: string,\n  headers: Headers,\n): Promise<LineageReadResult> {\n  let response: Response;\n  try {\n    response = await fetchFn(url, { method: \"GET\", headers });\n  } catch (err) {\n    throw new LineageReadError(\n      `${source} lineage read failed: ${err instanceof Error ? err.message : String(err)}`,\n      undefined,\n      null,\n      { cause: err instanceof Error ? err.message : String(err) },\n    );\n  }\n  if (!response.ok) {\n    throw await lineageReadFailure(source, response);\n  }\n  return parseLineageGraph(source, response);\n}\n\n/**\n * Read a scope's lineage from the Personal Server that stores it.\n *\n * @remarks\n * Sends `GET /v1/data/:scope/lineage[/:version]` with a Web3Signed\n * `Authorization` header carrying `grantId`, the same authentication a data\n * read uses; the signed `uri` is the full path, version segment included.\n * The server resolves the data point id, fetches the view the grant sees\n * from the gateway and returns the gateway's `data` + `proof`.\n *\n * @returns The lineage view, with redacted entries for nodes the grant does\n *   not cover, plus the gateway attestation.\n * @throws {LineageReadError} On a non-2xx answer (`errorCode`: read errors,\n *   `INVALID_VERSION`, `NOT_FOUND` when the scope or version is not\n *   registered at the gateway, `LINEAGE_FORBIDDEN`, `LINEAGE_GATEWAY_ERROR`,\n *   `LINEAGE_UNAVAILABLE`), an unreadable body, a bad `version`, or a\n *   transport failure.\n */\nexport async function getPersonalServerLineage(\n  params: PersonalServerLineageParams,\n): Promise<LineageReadResult> {\n  const fetchFn = resolveFetch(params.fetch);\n  const baseUrl = normalizeBaseUrl(params.personalServerUrl);\n  const audience = params.audience ?? baseUrl;\n  const signer = resolveWriteSigner(params.signer, { account: params.account });\n  const path = personalServerLineagePath(\n    params.scope,\n    normalizeVersion(params.version),\n  );\n  const headers = new Headers(params.headers);\n  headers.set(\n    \"Authorization\",\n    await buildWeb3SignedHeader({\n      signMessage: signer.signMessage,\n      aud: audience,\n      method: \"GET\",\n      uri: path,\n      grantId: params.grantId,\n    }),\n  );\n  return sendLineageRead(\n    \"Personal Server\",\n    fetchFn,\n    `${baseUrl}${path}`,\n    headers,\n  );\n}\n\n/**\n * Read a data point's lineage from the gateway.\n *\n * @remarks\n * Sends `GET /v1/data/:dataPointId/lineage[/:version]` with a Web3Signed\n * `Authorization` header: `aud` = the gateway origin, `uri` =\n * {@link gatewayLineagePath} (lowercase id, version segment included),\n * empty-body `bodyHash`, and the lowercased `grantId` claim when given. The\n * gateway answers a uniform 404 for an unknown data point and for a signer\n * it will not serve, so the two cannot be told apart from outside.\n *\n * @returns The lineage view, with redacted entries for nodes the caller's\n *   grant does not cover, plus the gateway attestation.\n * @throws {LineageReadError} On a malformed `dataPointId` or `version`, a\n *   non-2xx answer (400 malformed request, 401 `LINEAGE_SIGNATURE_REQUIRED`\n *   / `LINEAGE_SIGNATURE_INVALID`, 404 unknown or not served), an unreadable\n *   body, or a transport failure.\n */\nexport async function getGatewayLineage(\n  params: GatewayLineageParams,\n): Promise<LineageReadResult> {\n  if (!isDataPointId(params.dataPointId)) {\n    throw new LineageReadError(\n      \"dataPointId must be a 32-byte hex string (see deriveDataPointId)\",\n      undefined,\n      \"INVALID_DATA_POINT_ID\",\n      { dataPointId: params.dataPointId },\n    );\n  }\n  const fetchFn = resolveFetch(params.fetch);\n  const baseUrl = normalizeBaseUrl(params.gatewayUrl);\n  const signer = resolveWriteSigner(params.signer, { account: params.account });\n  const uri = gatewayLineagePath(\n    params.dataPointId,\n    normalizeVersion(params.version),\n  );\n  const headers = new Headers(params.headers);\n  headers.set(\n    \"Authorization\",\n    await buildWeb3SignedHeader({\n      signMessage: signer.signMessage,\n      aud: baseUrl,\n      method: \"GET\",\n      uri,\n      grantId: params.grantId?.toLowerCase(),\n    }),\n  );\n  return sendLineageRead(\"Gateway\", fetchFn, `${baseUrl}${uri}`, headers);\n}\n\n/**\n * Read a lineage view from either the Personal Server (by scope) or the\n * gateway (by data point id), chosen by the params shape.\n *\n * @example\n * ```typescript\n * const fromPs = await getLineage({ personalServerUrl, scope, grantId, signer });\n * const fromGateway = await getLineage({ gatewayUrl, dataPointId, grantId, signer });\n * ```\n */\nexport function getLineage(\n  params: GetLineageParams,\n): Promise<LineageReadResult> {\n  return \"personalServerUrl\" in params\n    ? getPersonalServerLineage(params)\n    : getGatewayLineage(params);\n}\n", "/**\n * Reader for the error bodies a Personal Server (or the gateway) answers\n * with. Protocol errors use `{ error: { code, errorCode, message, details? } }`;\n * contract-level rejections use `{ error: \"CODE\", message }`; the gateway\n * uses `{ success: false, error: \"<message>\", code: \"CODE\" }` with lineage\n * detail fields (`unknown`, `scope`, `sourceScope`) at the top level; older\n * clients saw `{ code, message }`. All four are accepted.\n *\n * @internal\n */\n\nexport interface PersonalServerErrorBody {\n  errorCode: string | null;\n  message: string | null;\n  details?: Record<string, unknown>;\n}\n\nexport function isRecord(value: unknown): value is Record<string, unknown> {\n  return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\n/** Read a non-2xx response body; never throws. */\nexport async function readPersonalServerErrorBody(\n  response: Response,\n): Promise<PersonalServerErrorBody> {\n  let body: unknown;\n  try {\n    body = await response.json();\n  } catch {\n    return { errorCode: null, message: null };\n  }\n  if (!isRecord(body)) return { errorCode: null, message: null };\n  const nested = isRecord(body.error) ? body.error : null;\n  // Gateway bodies are `{ success: false, error: <message>, code: <CODE> }`;\n  // the Personal Server's contract rejections are `{ error: <CODE>, message }`.\n  const gatewayShape =\n    typeof body.error === \"string\" && typeof body.code === \"string\";\n  const code =\n    nested?.errorCode ??\n    nested?.code ??\n    body.errorCode ??\n    (gatewayShape ? body.code : undefined) ??\n    (typeof body.error === \"string\" ? body.error : undefined) ??\n    body.code;\n  const message =\n    nested?.message ?? body.message ?? (gatewayShape ? body.error : undefined);\n  // Gateway lineage rejections carry their detail fields at the top level.\n  const gatewayDetails: Record<string, unknown> = {};\n  for (const key of [\"unknown\", \"scope\", \"sourceScope\"]) {\n    if (gatewayShape && body[key] !== undefined)\n      gatewayDetails[key] = body[key];\n  }\n  const details =\n    nested?.details ??\n    body.details ??\n    (Object.keys(gatewayDetails).length > 0 ? gatewayDetails : undefined);\n  return {\n    errorCode: typeof code === \"string\" ? code : null,\n    message: typeof message === \"string\" ? message : null,\n    ...(isRecord(details) ? { details } : {}),\n  };\n}\n", "import {\n  buildWeb3SignedHeader,\n  type Web3SignedSignFn,\n} from \"../auth/web3-signed-builder\";\nimport { DataPointDeletedError } from \"../errors\";\nimport { DataFileEnvelopeSchema, type DataFileEnvelope } from \"./data-file\";\nimport {\n  isDataPointTombstone,\n  tombstoneDeletedAt,\n} from \"./data-point-deletion\";\nimport { readJsonValue } from \"../utils/response-body\";\n\nexport interface BuildPersonalServerDataReadRequestParams {\n  personalServerUrl: string;\n  scope: string;\n  grantId: string;\n  signMessage: Web3SignedSignFn;\n  audience?: string;\n  headers?: HeadersInit;\n}\n\nexport interface ReadPersonalServerDataParams extends BuildPersonalServerDataReadRequestParams {\n  fetch?: typeof fetch;\n}\n\nexport function personalServerDataReadPath(scope: string): string {\n  return `/v1/data/${encodeURIComponent(scope)}`;\n}\n\nexport async function buildPersonalServerDataReadRequest(\n  params: BuildPersonalServerDataReadRequestParams,\n): Promise<Request> {\n  const path = personalServerDataReadPath(params.scope);\n  const baseUrl = params.personalServerUrl.replace(/\\/+$/, \"\");\n  const audience = params.audience ?? baseUrl;\n  const headers = new Headers(params.headers);\n\n  headers.set(\n    \"Authorization\",\n    await buildWeb3SignedHeader({\n      aud: audience,\n      grantId: params.grantId,\n      method: \"GET\",\n      signMessage: params.signMessage,\n      uri: path,\n    }),\n  );\n\n  return new Request(`${baseUrl}${path}`, {\n    headers,\n    method: \"GET\",\n  });\n}\n\nexport async function readPersonalServerData(\n  params: ReadPersonalServerDataParams,\n): Promise<DataFileEnvelope> {\n  const fetchFn = params.fetch ?? globalThis.fetch;\n  if (fetchFn === undefined) {\n    throw new Error(\"No fetch implementation available\");\n  }\n\n  const request = await buildPersonalServerDataReadRequest(params);\n  const response = await fetchFn(request);\n\n  // 410 = the scope was tombstoned. Typed so callers can branch on it\n  // instead of pattern-matching a generic read failure.\n  if (response.status === 410) {\n    throw new DataPointDeletedError(\n      `Personal Server scope '${params.scope}' has been deleted`,\n      {\n        scope: params.scope,\n        deletedAt: tombstoneDeletedAt(await readJsonValue(response)),\n      },\n    );\n  }\n\n  if (!response.ok) {\n    throw new Error(\n      `Personal Server data read failed: ${response.status} ${response.statusText}`,\n    );\n  }\n\n  const body: unknown = await response.json();\n  // A tombstone must never be returned as data, even if the server answered\n  // 200 with the deleted row (deletedAt / tombstone hash pair).\n  if (isDataPointTombstone(body)) {\n    throw new DataPointDeletedError(\n      `Personal Server scope '${params.scope}' has been deleted`,\n      { scope: params.scope, deletedAt: tombstoneDeletedAt(body) },\n    );\n  }\n\n  return DataFileEnvelopeSchema.parse(body);\n}\n", "import { z } from \"zod\";\n\nexport const DataFileEnvelopeSchema = z.object({\n  $schema: z.string().url().optional(),\n  version: z.literal(\"1.0\"),\n  scope: z.string(),\n  schemaId: z.string().optional(),\n  collectedAt: z.string().datetime(),\n  data: z.record(z.string(), z.unknown()),\n});\n\nexport type DataFileEnvelope = z.infer<typeof DataFileEnvelopeSchema>;\n\nexport function createDataFileEnvelope(\n  scope: string,\n  collectedAt: string,\n  data: Record<string, unknown>,\n  schemaUrl?: string,\n  schemaId?: string,\n): DataFileEnvelope {\n  return {\n    ...(schemaUrl !== undefined && { $schema: schemaUrl }),\n    ...(schemaId !== undefined && { schemaId }),\n    version: \"1.0\",\n    scope,\n    collectedAt,\n    data,\n  };\n}\n\nexport const IngestResponseSchema = z.object({\n  scope: z.string(),\n  collectedAt: z.string().datetime(),\n  status: z.enum([\"stored\", \"syncing\"]),\n});\n\nexport type IngestResponse = z.infer<typeof IngestResponseSchema>;\n", "import { z } from \"zod\";\n\n// The source_id (first segment) must stay lowercase. Tail segments may keep\n// the historical camelCase form the contract-freeze spec explicitly preserves\n// (e.g. spotify.savedTracks, youtube.playlistItems) \u2014 the chain never validates\n// scope strings, so the SDK must not be stricter than the protocol.\nconst SOURCE_RE = /^[a-z0-9][a-z0-9_]*$/;\nconst TAIL_SEGMENT_RE = /^[a-zA-Z0-9][a-zA-Z0-9_]*$/;\n\nexport const ScopeSchema = z.string().refine(\n  (scope) => {\n    const parts = scope.split(\".\");\n    if (parts.length < 2 || parts.length > 3) return false;\n    const [source, ...tail] = parts;\n    return (\n      SOURCE_RE.test(source) && tail.every((part) => TAIL_SEGMENT_RE.test(part))\n    );\n  },\n  {\n    message:\n      \"Scope must be {source}.{category}[.{subcategory}]; source lowercase, tail may keep the historical camelCase form (e.g. spotify.savedTracks)\",\n  },\n);\n\nexport type Scope = z.infer<typeof ScopeSchema>;\n\nexport interface ParsedScope {\n  source: string;\n  category: string;\n  subcategory?: string;\n  raw: string;\n}\n\nexport function parseScope(scope: string): ParsedScope {\n  const validated = ScopeSchema.parse(scope);\n  const parts = validated.split(\".\");\n  return {\n    source: parts[0],\n    category: parts[1],\n    subcategory: parts[2],\n    raw: validated,\n  };\n}\n\nexport function scopeToPathSegments(scope: string): string[] {\n  const parsed = parseScope(scope);\n  const segments = [parsed.source, parsed.category];\n  if (parsed.subcategory) {\n    segments.push(parsed.subcategory);\n  }\n  return segments;\n}\n\nexport function scopeMatchesPattern(\n  requestedScope: string,\n  grantPattern: string,\n): boolean {\n  if (grantPattern === \"*\") return true;\n\n  if (grantPattern.endsWith(\".*\")) {\n    const prefix = grantPattern.slice(0, -1);\n    return requestedScope.startsWith(prefix);\n  }\n\n  return requestedScope === grantPattern;\n}\n\nexport function scopeCoveredByGrant(\n  requestedScope: string,\n  grantedScopes: string[],\n): boolean {\n  return grantedScopes.some((pattern) =>\n    scopeMatchesPattern(requestedScope, pattern),\n  );\n}\n", "import { scopeMatchesPattern } from \"./scopes\";\n\n/**\n * Grant scope-entry grammar.\n *\n * A signed grant carries `scopes: string[]`. Each entry is\n * `[operation:]scope` - an optional lowercase ASCII operation prefix before\n * the first `:`, then a scope pattern (`*`, `{prefix}.*`, or an exact scope).\n * A missing prefix means read. `write:notes.entries` authorizes writing\n * `notes.entries` and nothing else; `notes.entries` authorizes reading it.\n *\n * The string form is the wire and storage detail: it is what the grantor\n * signs (EIP-712 `GrantRegistration.scopes`) and what the gateway stores\n * verbatim. The Personal Server is the sole interpreter, and this module is\n * the SDK-side mirror of that interpretation. Builders and consent UIs should\n * work with the grouped `{ scope, actions }` view (see\n * {@link grantPermissions}) and never construct or parse the strings by hand.\n *\n * Matching rules, pinned by the Personal Server policy\n * (personal-server-ts `packages/core/src/policy/data-write.ts` and\n * `data-read.ts`):\n * - the operation is compared exactly, case-sensitively;\n * - wildcards apply to the scope part only, via {@link scopeMatchesPattern};\n * - an entry whose operation is not recognised never authorizes anything.\n *   The parser fails closed on it (throws) rather than treating it as read;\n *   the matcher ({@link hasAction}) skips it, which is how the Personal\n *   Server treats an entry it does not understand.\n */\n\n/** Operations the grammar defines today, in canonical (output) order. */\nexport const SCOPE_ACTIONS = [\"read\", \"write\"] as const;\n\n/** An operation a grant entry can authorize over a scope. */\nexport type ScopeAction = (typeof SCOPE_ACTIONS)[number];\n\n/** One grant entry, split into its operation and scope pattern. */\nexport interface ParsedScopeEntry {\n  scope: string;\n  action: ScopeAction;\n}\n\n/**\n * The grouped view of a grant's scope entries: one row per scope pattern\n * with every operation the grant authorizes over it.\n */\nexport interface GrantPermission {\n  scope: string;\n  actions: ScopeAction[];\n}\n\n/**\n * Thrown when a scope entry does not fit the grammar - an unknown or\n * malformed operation prefix, or an empty scope part.\n */\nexport class InvalidScopeEntryError extends Error {\n  /** The offending entry, verbatim (unknown because it may not be a string). */\n  readonly entry: unknown;\n\n  constructor(entry: unknown, reason: string) {\n    super(`Invalid scope entry ${describeValue(entry)}: ${reason}`);\n    this.name = \"InvalidScopeEntryError\";\n    this.entry = entry;\n  }\n}\n\nconst OPERATION_SEPARATOR = \":\";\n\n// Render an untrusted value for an error message without ever throwing:\n// String() and JSON.stringify() both defer to the value's own toString /\n// toJSON, which a hostile JSON body can make throw.\nfunction describeValue(value: unknown): string {\n  if (typeof value === \"string\") return JSON.stringify(value);\n  if (value === null) return \"null\";\n  return `[${typeof value}]`;\n}\n\n// The only operation that is ever written out. Read has no prefix, and\n// `read:` is NOT an alias for it: the Personal Server's read policy matches\n// entries verbatim, so a `read:x` entry would authorize nothing there, and\n// the parser must reject it for the same reason.\nconst OPERATION_BY_PREFIX: Readonly<Record<string, ScopeAction>> = {\n  write: \"write\",\n};\n\nfunction assertScopePart(entry: string, scope: string): void {\n  if (scope.length === 0) {\n    throw new InvalidScopeEntryError(entry, \"scope part is empty\");\n  }\n  if (scope.includes(OPERATION_SEPARATOR)) {\n    throw new InvalidScopeEntryError(\n      entry,\n      `scope part must not contain \"${OPERATION_SEPARATOR}\"`,\n    );\n  }\n}\n\n/**\n * Split one grant scope entry into its operation and scope pattern.\n *\n * - `notes.entries` parses as `{ scope: \"notes.entries\", action: \"read\" }`\n * - `write:notes.*` parses as `{ scope: \"notes.*\", action: \"write\" }`\n *\n * Fails closed: a non-string entry, or an entry whose operation prefix is\n * not recognised (including\n * `read:`, any uppercase or non-ASCII prefix, or a wildcard in the operation\n * position) throws {@link InvalidScopeEntryError} and is never treated as a\n * read entry. An empty scope part (`write:`) throws as well.\n *\n * @param entry - A single element of a grant's `scopes` array.\n * @returns The operation and the scope pattern it applies to.\n * @throws InvalidScopeEntryError when the entry does not fit the grammar.\n */\nexport function parseScopeEntry(entry: string): ParsedScopeEntry {\n  // Grant bodies arrive from the network; a non-string element is a grammar\n  // violation like any other, not a TypeError from indexOf.\n  const raw: unknown = entry;\n  if (typeof raw !== \"string\") {\n    throw new InvalidScopeEntryError(raw, \"entry must be a string\");\n  }\n  const separatorIndex = entry.indexOf(OPERATION_SEPARATOR);\n  if (separatorIndex === -1) {\n    assertScopePart(entry, entry);\n    return { scope: entry, action: \"read\" };\n  }\n\n  const prefix = entry.slice(0, separatorIndex);\n  const scope = entry.slice(separatorIndex + 1);\n  const action = Object.hasOwn(OPERATION_BY_PREFIX, prefix)\n    ? OPERATION_BY_PREFIX[prefix]\n    : undefined;\n  if (action === undefined) {\n    throw new InvalidScopeEntryError(\n      entry,\n      `unknown operation \"${prefix}\" (known: ${Object.keys(OPERATION_BY_PREFIX).join(\", \")}; read has no prefix)`,\n    );\n  }\n  assertScopePart(entry, scope);\n  return { scope, action };\n}\n\n/**\n * Inverse of {@link parseScopeEntry}: render one operation over one scope\n * pattern as a grant scope entry. Read has no prefix.\n *\n * @param parsed - The operation and scope pattern to encode.\n * @returns The wire-form entry, e.g. `write:notes.entries` or `notes.entries`.\n * @throws InvalidScopeEntryError when the action is unknown or the scope part\n * is empty or contains `:`.\n */\nexport function formatScopeEntry(parsed: ParsedScopeEntry): string {\n  const { scope, action } = parsed;\n  assertScopePart(scope, scope);\n  if (action === \"read\") return scope;\n  // Looked up rather than hard-coded so an action can never be emitted\n  // without a prefix the parser accepts (and JS callers passing an unknown\n  // action fail closed instead of producing a read entry).\n  const prefix = Object.entries(OPERATION_BY_PREFIX).find(\n    ([, candidate]) => candidate === action,\n  )?.[0];\n  if (prefix === undefined) {\n    throw new InvalidScopeEntryError(\n      scope,\n      `unknown action ${describeValue(action)} (known: ${SCOPE_ACTIONS.join(\", \")})`,\n    );\n  }\n  return `${prefix}${OPERATION_SEPARATOR}${scope}`;\n}\n\nfunction compareScopes(a: string, b: string): number {\n  // Plain code-unit order: locale-independent, so the grouping is identical\n  // on every runtime.\n  if (a < b) return -1;\n  if (a > b) return 1;\n  return 0;\n}\n\nfunction sortActions(actions: Iterable<ScopeAction>): ScopeAction[] {\n  const present = new Set(actions);\n  return SCOPE_ACTIONS.filter((action) => present.has(action));\n}\n\n/**\n * Group a grant's scope entries into one `{ scope, actions }` row per scope\n * pattern - the view builders and consent UIs should render instead of the\n * raw strings.\n *\n * The result is canonical: rows are ordered by scope (code-unit order),\n * actions within a row follow {@link SCOPE_ACTIONS} order, and neither rows\n * nor actions repeat, whatever order or duplication the input had.\n *\n * Fails closed: if any entry does not fit the grammar this throws\n * {@link InvalidScopeEntryError} rather than silently dropping it, so a grant\n * carrying an operation this SDK does not know is never shown as narrower\n * than it is.\n *\n * @param scopes - A grant's `scopes` array, verbatim.\n * @returns The grouped, canonically ordered permissions.\n * @throws InvalidScopeEntryError when any entry does not fit the grammar.\n */\nexport function grantPermissions(scopes: readonly string[]): GrantPermission[] {\n  const byScope = new Map<string, Set<ScopeAction>>();\n  for (const entry of scopes) {\n    const { scope, action } = parseScopeEntry(entry);\n    let actions = byScope.get(scope);\n    if (actions === undefined) {\n      actions = new Set<ScopeAction>();\n      byScope.set(scope, actions);\n    }\n    actions.add(action);\n  }\n  return [...byScope.keys()].sort(compareScopes).map((scope) => ({\n    scope,\n    actions: sortActions(byScope.get(scope) ?? []),\n  }));\n}\n\n/**\n * Inverse of {@link grantPermissions}: flatten grouped permissions back into\n * the `string[]` form a grant is signed with.\n *\n * Output is canonical (scopes in code-unit order, read before write, no\n * duplicates), so `permissionsToScopes(grantPermissions(scopes))` is the\n * canonical form of `scopes`, and `grantPermissions(permissionsToScopes(p))`\n * is the canonical form of `p`. Rows with no actions contribute nothing; a\n * row with an action the grammar does not define throws rather than being\n * dropped.\n *\n * @param permissions - Grouped permissions, in any order, possibly repeating\n * a scope.\n * @returns The scope entries, one per (scope, action) pair.\n * @throws InvalidScopeEntryError when a scope or action does not fit the\n * grammar.\n */\nexport function permissionsToScopes(\n  permissions: readonly GrantPermission[],\n): string[] {\n  const byScope = new Map<string, Set<ScopeAction>>();\n  for (const { scope, actions } of permissions) {\n    let merged = byScope.get(scope);\n    if (merged === undefined) {\n      merged = new Set<ScopeAction>();\n      byScope.set(scope, merged);\n    }\n    for (const action of actions) {\n      if (!(SCOPE_ACTIONS as readonly string[]).includes(action)) {\n        throw new InvalidScopeEntryError(\n          scope,\n          `unknown action ${describeValue(action)} (known: ${SCOPE_ACTIONS.join(\", \")})`,\n        );\n      }\n      merged.add(action);\n    }\n  }\n  const entries: string[] = [];\n  for (const scope of [...byScope.keys()].sort(compareScopes)) {\n    for (const action of sortActions(byScope.get(scope) ?? [])) {\n      entries.push(formatScopeEntry({ scope, action }));\n    }\n  }\n  return entries;\n}\n\n/**\n * Does this grant authorize `action` over `scope`?\n *\n * The scope part is matched with the SDK's scope wildcard matcher\n * ({@link scopeMatchesPattern}: `*`, `{prefix}.*`, or exact), the action\n * exactly. Entries that do not fit the grammar are skipped - they authorize\n * nothing, which is exactly how the Personal Server treats them - so a grant\n * that carries an operation this SDK does not know still answers correctly\n * for the operations it does.\n *\n * @param scopes - A grant's `scopes` array, verbatim.\n * @param scope - The concrete scope being requested. Never prefixed: a value\n * containing `:` is not a scope id and yields `false`.\n * @param action - The operation being requested.\n * @returns `true` if some entry grants `action` over a pattern covering\n * `scope`.\n */\nexport function hasAction(\n  scopes: readonly string[],\n  scope: string,\n  action: ScopeAction,\n): boolean {\n  // A requested scope is a concrete scope id and never carries a prefix; the\n  // Personal Server rejects anything else with ScopeSchema before it ever\n  // reaches its matcher, so answer the same way here instead of letting\n  // `write:x` fall through to a `*` entry.\n  if (scope.includes(OPERATION_SEPARATOR)) return false;\n  for (const entry of scopes) {\n    let parsed: ParsedScopeEntry;\n    try {\n      parsed = parseScopeEntry(entry);\n    } catch (error) {\n      if (error instanceof InvalidScopeEntryError) continue;\n      throw error;\n    }\n    if (parsed.action === action && scopeMatchesPattern(scope, parsed.scope)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * {@link grantPermissions} for a grant record read back from the gateway:\n * returns `undefined` instead of throwing when the scope list carries an\n * entry this SDK version cannot interpret, so a grant with a newer operation\n * still loads (with `scopes` intact) rather than failing the whole read.\n *\n * @param scopes - A grant's `scopes` array, verbatim.\n * @returns The grouped permissions, or `undefined` if any entry is\n * uninterpretable.\n */\nexport function tryGrantPermissions(\n  scopes: readonly string[],\n): GrantPermission[] | undefined {\n  try {\n    return grantPermissions(scopes);\n  } catch (error) {\n    if (error instanceof InvalidScopeEntryError) return undefined;\n    throw error;\n  }\n}\n", "/**\n * Builder-side client for the Personal Server Write API.\n *\n * @remarks\n * A builder holding a write-grant (a grant whose scope entries carry the\n * `write:` prefix, see {@link formatScopeEntry}) writes into a user's Personal\n * Server in two steps:\n *\n * 1. {@link openWriteSession}: `POST /v1/write/session` with a Web3Signed\n *    handshake that carries the grant id as a signed claim. The Personal\n *    Server verifies the builder key against the grant and mints a\n *    short-lived bearer token bound to `{ builder, grantId }`.\n * 2. {@link writeData}: `POST /v1/data/:scope` with that bearer plus an\n *    `X-Vana-Write-Signature` proof, a second Web3Signed signature over the\n *    representation the Personal Server will store, again carrying the grant\n *    id as a signed claim. The Personal Server stores the proof with the\n *    record under the reserved `$writtenBy` key so anyone holding the record\n *    can verify who wrote it.\n *\n * What the proof covers: a JSON write signs the request body, which must be\n * the compact `JSON.stringify` form (the server rejects anything else with\n * `WRITE_BODY_NOT_CANONICAL`); a binary write signs the `$binary` record the\n * server stores for the bytes and their representation headers\n * ({@link binaryWriteSignedBytes}), not the raw bytes. Every proof is\n * single-use: a retry after a lost response signs a fresh proof.\n *\n * Derivatives name their sources through `lineage` (see\n * {@link deriveDataPointId}): for a JSON write the ids are the top-level\n * `lineage` field of the body (inside the signed bytes); for a binary write\n * they are the `lineage` field of the `X-Vana-Metadata` JSON (inside the\n * signed `$binary` record). The server validates them and mirrors them under\n * the reserved `$lineage` key. Callers never send `$writtenBy` or `$lineage`.\n *\n * @category Protocol\n */\n\nimport { sha256 } from \"@noble/hashes/sha2\";\nimport { bytesToHex, isAddress, type Address, type Hex } from \"viem\";\nimport { z } from \"zod\";\nimport { buildWeb3SignedHeader } from \"../auth/web3-signed-builder\";\nimport {\n  type PersonalServerWriteError,\n  WriteConflictError,\n  WriteForbiddenError,\n  WriteLineageError,\n  WriteRejectedError,\n  WriteRequestError,\n  WriteSessionError,\n  WriteSessionExpiredError,\n  WriteUnauthorizedError,\n} from \"../errors\";\nimport { toBase64 } from \"../utils/encoding\";\nimport { IngestResponseSchema, type IngestResponse } from \"./data-file\";\nimport {\n  assertDerivedScopeNaming,\n  deriveDataPointId,\n  isDataPointId,\n} from \"./lineage\";\nimport {\n  isRecord,\n  readPersonalServerErrorBody,\n} from \"./personal-server-error-body\";\nimport { scopeMatchesPattern } from \"./scopes\";\nimport {\n  errorMessage,\n  normalizeBaseUrl,\n  proofKeyFor,\n  resolveFetch,\n  sendWithFreshProof,\n  type WriteTransportRetryOptions,\n} from \"./write-request\";\nimport {\n  resolveWriteSigner,\n  type ResolveWriteSignerOptions,\n  type WriteSigner,\n  type WriteSignerSource,\n} from \"./write-signer\";\n\nexport type { WriteTransportRetryOptions };\n\n/** Path of the write-session handshake. */\nexport const WRITE_SESSION_PATH = \"/v1/write/session\";\n/** Header carrying the builder's per-write payload proof. */\nexport const WRITE_SIGNATURE_HEADER = \"X-Vana-Write-Signature\";\n/** Header carrying caller metadata (and `lineage`) for a binary write. */\nexport const WRITE_METADATA_HEADER = \"X-Vana-Metadata\";\n/** Field the lineage source ids travel in (body for JSON, metadata for binary). */\nexport const LINEAGE_FIELD = \"lineage\";\n/** The most sources one record may cite. */\nexport const MAX_LINEAGE_SOURCES = 256;\n/** Header carrying the filename of a binary write (printable ASCII names). */\nexport const WRITE_FILENAME_HEADER = \"X-Filename\";\n/**\n * Header carrying a filename the `X-Filename` header cannot: the Personal\n * Server percent-decodes `filename*=UTF-8''...` (RFC 5987).\n */\nexport const WRITE_CONTENT_DISPOSITION_HEADER = \"Content-Disposition\";\n/** Reserved record key the Personal Server stamps builder attribution into. */\nexport const WRITER_ATTRIBUTION_KEY = \"$writtenBy\";\n/** Reserved record key the Personal Server stamps lineage sources into. */\nexport const LINEAGE_KEY = \"$lineage\";\n/** Record keys a builder must never send. */\nexport const RESERVED_WRITE_KEYS: readonly string[] = [\n  WRITER_ATTRIBUTION_KEY,\n  LINEAGE_KEY,\n];\n\n/** An open write session: the bearer token plus what it was minted for. */\nexport interface WriteSession {\n  /** Personal Server origin, without a trailing slash. */\n  personalServerUrl: string;\n  /** Web3Signed audience every proof under this session is addressed to. */\n  audience: string;\n  /** The write-grant the session is bound to. */\n  grantId: string;\n  /** The bearer token (`vana_write_...`). */\n  accessToken: string;\n  /** Unix milliseconds after which the token is no longer accepted. */\n  expiresAt: number;\n  /** Write patterns (prefix stripped) the session may write into. */\n  writeScopes: readonly string[];\n  /** The builder key the session was opened with; signs every write proof. */\n  signer: WriteSigner;\n}\n\nexport interface OpenWriteSessionParams extends ResolveWriteSignerOptions {\n  /** Personal Server origin, e.g. `https://ps.example.com`. */\n  personalServerUrl: string;\n  /** Builder key: a viem `LocalAccount`, `WalletClient`, or `{ signMessage }`. */\n  signer: WriteSignerSource;\n  /** The write-grant issued to the builder. */\n  grantId: string;\n  /** Web3Signed audience; defaults to `personalServerUrl`. */\n  audience?: string;\n  /** `fetch` to use; defaults to `globalThis.fetch`. */\n  fetch?: typeof fetch;\n  /** Extra request headers. */\n  headers?: HeadersInit;\n  retry?: WriteTransportRetryOptions;\n}\n\n/** A lineage source: a data point id, or the pair it is derived from. */\nexport type LineageSource = Hex | { ownerAddress: Address; scope: string };\n\n/** Bytes to store as an unstructured (binary) record. */\nexport interface WriteBinaryPayload {\n  bytes: Uint8Array;\n  /** Media type, e.g. `application/pdf`. Parameters are dropped when stored. */\n  contentType: string;\n  /**\n   * Stored with the record. Sent as `X-Filename` when it is printable ASCII,\n   * otherwise as `Content-Disposition: attachment; filename*=UTF-8''...`,\n   * which the Personal Server decodes back to the same string. Must not have\n   * leading or trailing whitespace (HTTP would strip it and the signed\n   * representation would no longer match).\n   */\n  filename?: string;\n}\n\ninterface WriteDataBaseParams {\n  session: WriteSession;\n  /**\n   * The scope to write into; must match one of the session's write patterns.\n   * A derived scope must not share its first dot-segment with any source's\n   * scope (the server rejects it with `LINEAGE_SCOPE_UNDER_SOURCE_PREFIX`):\n   * put derivatives in the app's own namespace.\n   */\n  scope: string;\n  /**\n   * The data points this record was derived from: ids\n   * ({@link deriveDataPointId}) or `{ ownerAddress, scope }` pairs the SDK\n   * derives the id from. Distinct, at most {@link MAX_LINEAGE_SOURCES}, all\n   * belonging to the same owner as the target scope, never the record's own\n   * id. Sent lowercased as the record's `lineage` field, inside the signed\n   * bytes. `[]` is an explicit root statement and is sent; absent or `null`\n   * makes no statement. Pairs also let the SDK apply the naming rule\n   * ({@link assertDerivedScopeNaming}) before anything is signed.\n   */\n  lineage?: readonly LineageSource[] | null;\n  /** `fetch` to use; defaults to `globalThis.fetch`. */\n  fetch?: typeof fetch;\n  /** Extra request headers. */\n  headers?: HeadersInit;\n  retry?: WriteTransportRetryOptions;\n}\n\n/**\n * A JSON write: `data` is stored as the record (plus `lineage` when given).\n * Anything else to store goes inside `data`; `lineage` and reserved keys are\n * not accepted in it.\n */\nexport interface WriteJsonDataParams extends WriteDataBaseParams {\n  data: Record<string, unknown>;\n  binary?: never;\n  metadata?: never;\n}\n\n/** A binary write: the bytes are stored as a `$binary` record. */\nexport interface WriteBinaryDataParams extends WriteDataBaseParams {\n  binary: WriteBinaryPayload;\n  data?: never;\n  /**\n   * Caller metadata stored with the record (`X-Vana-Metadata`, part of the\n   * signed `$binary` record). Must not contain `lineage` (use the option) or\n   * a reserved key.\n   */\n  metadata?: Record<string, unknown>;\n}\n\nexport type WriteDataParams = WriteJsonDataParams | WriteBinaryDataParams;\n\nconst WriteDataResultSchema = IngestResponseSchema.extend({\n  // Present when the write carried lineage: the validated, lowercased ids.\n  lineage: z.object({ sources: z.array(z.string()) }).optional(),\n});\n\n/** The Personal Server's ingest answer, plus the accepted lineage if any. */\nexport type WriteDataResult = IngestResponse & {\n  lineage?: { sources: Hex[] };\n};\n\nconst WriteSessionResponseSchema = z.object({\n  access_token: z.string().min(1),\n  token_type: z.string(),\n  expires_in: z.number().nonnegative(),\n  scope: z.string(),\n});\n\nfunction dataPath(scope: string): string {\n  return `/v1/data/${encodeURIComponent(scope)}`;\n}\n\n/**\n * Open a write session against a Personal Server.\n *\n * @remarks\n * Sends `POST /v1/write/session` with a Web3Signed `Authorization` header\n * whose signed claims carry `grantId`. The handshake proof is single-use on\n * the server; a transport retry signs a new one.\n *\n * @returns The session to pass to {@link writeData}.\n * @throws {WriteSessionError} When the Personal Server refuses the handshake\n *   (`errorCode` names why: `UNREGISTERED_BUILDER`, `GRANT_REQUIRED`,\n *   `GRANT_REVOKED`, `SCOPE_MISMATCH` for a grant without write entries,\n *   `INVALID_SIGNATURE` when the key is not the grantee,\n *   `GRANT_OWNER_MISMATCH`, ...).\n * @throws {WriteTransportError} When `fetch` threw on every attempt.\n * @throws {WriteRequestError} When the signer is unusable.\n */\nexport async function openWriteSession(\n  params: OpenWriteSessionParams,\n): Promise<WriteSession> {\n  const fetchFn = resolveFetch(params.fetch);\n  const personalServerUrl = normalizeBaseUrl(params.personalServerUrl);\n  const audience = params.audience ?? personalServerUrl;\n  const signer = resolveWriteSigner(params.signer, { account: params.account });\n\n  const response = await sendWithFreshProof(\n    \"Write session handshake\",\n    fetchFn,\n    params.retry,\n    proofKeyFor({\n      aud: audience,\n      method: \"POST\",\n      uri: WRITE_SESSION_PATH,\n      grantId: params.grantId,\n    }),\n    async (iat) => {\n      const headers = new Headers(params.headers);\n      headers.set(\n        \"Authorization\",\n        await buildWeb3SignedHeader({\n          signMessage: signer.signMessage,\n          aud: audience,\n          method: \"POST\",\n          uri: WRITE_SESSION_PATH,\n          grantId: params.grantId,\n          iat,\n        }),\n      );\n      return {\n        url: `${personalServerUrl}${WRITE_SESSION_PATH}`,\n        init: { method: \"POST\", headers },\n      };\n    },\n  );\n  // Read the clock before parsing so `expiresAt` never overstates the\n  // remaining lifetime.\n  const mintedAt = Date.now();\n\n  if (!response.ok) {\n    const { errorCode, message, details } =\n      await readPersonalServerErrorBody(response);\n    throw new WriteSessionError(\n      message ??\n        `Write session handshake failed: ${response.status} ${response.statusText}`,\n      response.status,\n      errorCode,\n      details,\n    );\n  }\n\n  let body: unknown;\n  try {\n    body = await response.json();\n  } catch (err) {\n    throw new WriteSessionError(\n      \"Write session response is not JSON\",\n      response.status,\n      null,\n      { cause: errorMessage(err) },\n    );\n  }\n  const parsed = WriteSessionResponseSchema.safeParse(body);\n  if (!parsed.success) {\n    throw new WriteSessionError(\n      \"Write session response is not a session\",\n      response.status,\n      null,\n      { issues: parsed.error.issues },\n    );\n  }\n  if (parsed.data.token_type.toLowerCase() !== \"bearer\") {\n    throw new WriteSessionError(\n      `Write session token type is not Bearer: ${parsed.data.token_type}`,\n      response.status,\n    );\n  }\n\n  return {\n    personalServerUrl,\n    audience,\n    grantId: params.grantId,\n    accessToken: parsed.data.access_token,\n    expiresAt: mintedAt + parsed.data.expires_in * 1000,\n    writeScopes: parsed.data.scope.split(\" \").filter((s) => s.length > 0),\n    signer,\n  };\n}\n\n/** Every field {@link writeData} relies on, checked before any is used. */\nfunction isWriteSession(value: unknown): value is WriteSession {\n  if (!isRecord(value)) return false;\n  const signer: unknown = value.signer;\n  return (\n    typeof value.personalServerUrl === \"string\" &&\n    typeof value.audience === \"string\" &&\n    typeof value.grantId === \"string\" &&\n    typeof value.accessToken === \"string\" &&\n    value.accessToken.length > 0 &&\n    typeof value.expiresAt === \"number\" &&\n    Number.isFinite(value.expiresAt) &&\n    Array.isArray(value.writeScopes) &&\n    value.writeScopes.every((scope) => typeof scope === \"string\") &&\n    isRecord(signer) &&\n    typeof signer.signMessage === \"function\"\n  );\n}\n\n/** `true` when one of the session's write patterns covers `scope`. */\nexport function sessionCoversScope(\n  session: Pick<WriteSession, \"writeScopes\">,\n  scope: string,\n): boolean {\n  if (\n    !isRecord(session) ||\n    !Array.isArray(session.writeScopes) ||\n    !session.writeScopes.every((pattern) => typeof pattern === \"string\")\n  ) {\n    throw new WriteRequestError(\"session must come from openWriteSession\");\n  }\n  return session.writeScopes.some((pattern) =>\n    scopeMatchesPattern(scope, pattern),\n  );\n}\n\n/**\n * The media type the Personal Server stores for a binary write: the\n * `Content-Type` minus its parameters, `application/octet-stream` when blank.\n */\nexport function normalizeBinaryMimeType(contentType: string | null): string {\n  if (!contentType) return \"application/octet-stream\";\n  return contentType.split(\";\")[0].trim() || \"application/octet-stream\";\n}\n\n/**\n * How the Personal Server reads an `X-Vana-Metadata` header: JSON when it\n * parses, the raw string otherwise, `undefined` when absent or blank.\n */\nexport function parseWriteMetadataHeader(value: string | null): unknown {\n  if (value === null) return undefined;\n  const trimmed = value.trim();\n  if (trimmed === \"\") return undefined;\n  try {\n    return JSON.parse(trimmed);\n  } catch {\n    return value;\n  }\n}\n\n/**\n * Encode a metadata object for the `X-Vana-Metadata` header. Non-ASCII\n * characters are `\\uXXXX`-escaped so the value is header-safe everywhere;\n * it parses back to the same object.\n */\nexport function encodeWriteMetadataHeader(\n  metadata: Record<string, unknown>,\n): string {\n  let json: string;\n  try {\n    json = JSON.stringify(metadata);\n  } catch (err) {\n    throw new WriteRequestError(\n      `metadata is not JSON-serialisable: ${errorMessage(err)}`,\n    );\n  }\n  if (typeof json !== \"string\") {\n    throw new WriteRequestError(\"metadata must serialise to JSON\");\n  }\n  return json.replace(\n    /[\\u007f-\\uffff]/g,\n    (c) => `\\\\u${c.charCodeAt(0).toString(16).padStart(4, \"0\")}`,\n  );\n}\n\nexport interface BinaryWriteSignedBytesInput {\n  /** The raw body bytes the write sends. */\n  bytes: Uint8Array;\n  /** The `Content-Type` header the write sends (parameters are ignored). */\n  contentType: string;\n  /** The `X-Filename` header value the write sends, if any. */\n  filename?: string;\n  /** The exact `X-Vana-Metadata` header value the write sends, if any. */\n  metadataHeader?: string;\n}\n\n/**\n * The bytes a builder signs for a binary write: the compact JSON of the\n * `$binary` record the Personal Server stores for these headers and bytes\n * (`personal-server-ts` `binaryWriteSignedBytes`, mirrored field for field).\n *\n * @returns UTF-8 bytes of the stored record's compact JSON.\n */\nexport function binaryWriteSignedBytes(\n  input: BinaryWriteSignedBytesInput,\n): Uint8Array {\n  const metadata = parseWriteMetadataHeader(input.metadataHeader ?? null);\n  const record: Record<string, unknown> = {\n    $binary: true,\n    mimeType: normalizeBinaryMimeType(input.contentType),\n    ...(input.filename ? { filename: input.filename } : {}),\n    sizeBytes: input.bytes.length,\n    contentHash: bytesToHex(sha256(input.bytes)),\n    encoding: \"base64\",\n    content: toBase64(input.bytes),\n    ...(metadata !== undefined ? { metadata } : {}),\n  };\n  return new TextEncoder().encode(JSON.stringify(record));\n}\n\nconst PRINTABLE_ASCII = /^[\\x20-\\x7e]*$/;\n\n/**\n * Carry a filename the way the Personal Server reads it back verbatim:\n * `X-Filename` for printable ASCII, RFC 5987 `filename*` otherwise (a raw\n * non-ASCII header value is rejected by `fetch` or mangled in transit).\n */\nfunction setFilenameHeader(headers: Headers, filename: string): void {\n  if (PRINTABLE_ASCII.test(filename)) {\n    headers.set(WRITE_FILENAME_HEADER, filename);\n    return;\n  }\n  headers.set(\n    WRITE_CONTENT_DISPOSITION_HEADER,\n    `attachment; filename*=UTF-8''${encodeURIComponent(filename)}`,\n  );\n}\n\nfunction assertNoReservedKeys(\n  value: Record<string, unknown>,\n  where: string,\n): void {\n  for (const key of RESERVED_WRITE_KEYS) {\n    if (Object.prototype.hasOwnProperty.call(value, key)) {\n      throw new WriteRequestError(\n        `${where} must not contain the reserved ${key} key; the Personal Server stamps it`,\n        { key },\n      );\n    }\n  }\n}\n\nfunction isLineagePair(\n  value: unknown,\n): value is { ownerAddress: Address; scope: string } {\n  return (\n    isRecord(value) &&\n    typeof value.ownerAddress === \"string\" &&\n    typeof value.scope === \"string\"\n  );\n}\n\n/**\n * Validate and lowercase the sources the way the Personal Server will\n * (distinct, at most {@link MAX_LINEAGE_SOURCES}, never the record's own id)\n * and apply the naming rule to every source given as a pair. `[]` is kept:\n * it is an explicit root statement.\n */\nfunction normalizeLineage(lineage: unknown, derivedScope: string): Hex[] {\n  if (!Array.isArray(lineage)) {\n    throw new WriteRequestError(\"lineage must be an array of data point ids\");\n  }\n  if (lineage.length > MAX_LINEAGE_SOURCES) {\n    throw new WriteRequestError(\n      `lineage lists ${lineage.length} sources; the maximum is ${MAX_LINEAGE_SOURCES}`,\n      { max: MAX_LINEAGE_SOURCES, count: lineage.length },\n    );\n  }\n  const seen = new Set<string>();\n  const sources: Hex[] = [];\n  const sourceScopes: string[] = [];\n  const ownIds = new Set<string>();\n  for (const entry of lineage as unknown[]) {\n    let id: Hex;\n    if (isLineagePair(entry)) {\n      if (!isAddress(entry.ownerAddress, { strict: false })) {\n        throw new WriteRequestError(\n          \"lineage source ownerAddress must be an EVM address\",\n          { ownerAddress: entry.ownerAddress },\n        );\n      }\n      if (entry.scope.length === 0) {\n        throw new WriteRequestError(\"lineage source scope is required\");\n      }\n      id = deriveDataPointId(entry.ownerAddress, entry.scope);\n      sourceScopes.push(entry.scope);\n      ownIds.add(deriveDataPointId(entry.ownerAddress, derivedScope));\n    } else if (isDataPointId(entry)) {\n      id = entry;\n    } else {\n      throw new WriteRequestError(\n        \"lineage entries must be 32-byte hex data point ids or { ownerAddress, scope } pairs\",\n        { entry },\n      );\n    }\n    const normalized = id.toLowerCase() as Hex;\n    if (seen.has(normalized)) {\n      throw new WriteRequestError(\"lineage must not repeat a data point id\", {\n        dataPointId: normalized,\n      });\n    }\n    seen.add(normalized);\n    sources.push(normalized);\n  }\n  for (const own of ownIds) {\n    if (seen.has(own)) {\n      throw new WriteRequestError(\n        \"lineage must not cite the record's own data point\",\n        { dataPointId: own, scope: derivedScope },\n      );\n    }\n  }\n  assertDerivedScopeNaming(derivedScope, sourceScopes);\n  return sources;\n}\n\nfunction assertNoLineageField(\n  value: Record<string, unknown>,\n  where: string,\n): void {\n  if (Object.prototype.hasOwnProperty.call(value, LINEAGE_FIELD)) {\n    throw new WriteRequestError(\n      `${where}.${LINEAGE_FIELD} is reserved; pass sources through the lineage option`,\n    );\n  }\n}\n\n/** The `X-Vana-Metadata` header for a binary write, or `undefined`. */\nfunction buildMetadataHeader(\n  metadata: Record<string, unknown> | undefined,\n  sources: Hex[] | undefined,\n): string | undefined {\n  if (metadata !== undefined) {\n    if (!isRecord(metadata)) {\n      throw new WriteRequestError(\"metadata must be a plain object\");\n    }\n    assertNoReservedKeys(metadata, \"metadata\");\n    assertNoLineageField(metadata, \"metadata\");\n  }\n  if (metadata === undefined && sources === undefined) return undefined;\n  return encodeWriteMetadataHeader({\n    ...(metadata ?? {}),\n    ...(sources !== undefined ? { [LINEAGE_FIELD]: sources } : {}),\n  });\n}\n\ninterface PreparedWrite {\n  body: Uint8Array;\n  /** What the proof's `bodyHash` commits to. */\n  signedBytes: Uint8Array;\n  contentType: string;\n  filename?: string;\n  metadataHeader?: string;\n}\n\nfunction prepareWrite(params: WriteDataParams): PreparedWrite {\n  if (params.binary !== undefined && params.data !== undefined) {\n    throw new WriteRequestError(\"Pass either data or binary, not both\");\n  }\n  // Absent or null lineage makes no statement: send nothing. Anything else\n  // (`[]` included: an explicit root) is validated before it is touched,\n  // since callers may be untyped.\n  const rawLineage: unknown = params.lineage;\n  const sources =\n    rawLineage === undefined || rawLineage === null\n      ? undefined\n      : normalizeLineage(rawLineage, params.scope);\n\n  if (params.binary !== undefined) {\n    const { bytes, contentType, filename } = params.binary;\n    if (!(bytes instanceof Uint8Array)) {\n      throw new WriteRequestError(\"binary.bytes must be a Uint8Array\");\n    }\n    if (typeof contentType !== \"string\" || contentType.trim() === \"\") {\n      throw new WriteRequestError(\"binary.contentType is required\");\n    }\n    if (filename !== undefined) {\n      if (typeof filename !== \"string\") {\n        throw new WriteRequestError(\"binary.filename must be a string\");\n      }\n      if (filename !== filename.trim()) {\n        throw new WriteRequestError(\n          \"binary.filename must not have leading or trailing whitespace\",\n        );\n      }\n    }\n    const metadataHeader = buildMetadataHeader(params.metadata, sources);\n    return {\n      body: bytes,\n      signedBytes: binaryWriteSignedBytes({\n        bytes,\n        contentType,\n        filename,\n        metadataHeader,\n      }),\n      contentType,\n      filename,\n      metadataHeader,\n    };\n  }\n\n  if (params.data === undefined) {\n    throw new WriteRequestError(\"Pass data (a JSON object) or binary\");\n  }\n  if (!isRecord(params.data)) {\n    throw new WriteRequestError(\"data must be a plain JSON object\");\n  }\n  if (params.metadata !== undefined) {\n    throw new WriteRequestError(\n      \"metadata applies to binary writes; put fields to store inside data\",\n    );\n  }\n  assertNoReservedKeys(params.data, \"data\");\n  assertNoLineageField(params.data, \"data\");\n  const record =\n    sources === undefined\n      ? params.data\n      : { ...params.data, [LINEAGE_FIELD]: sources };\n  let text: string;\n  try {\n    // Compact JSON is the contract: the server re-serialises the parsed\n    // record and requires it to match the signed bytes.\n    text = JSON.stringify(record);\n  } catch (err) {\n    throw new WriteRequestError(\n      `data is not JSON-serialisable: ${errorMessage(err)}`,\n    );\n  }\n  if (typeof text !== \"string\" || !text.startsWith(\"{\")) {\n    throw new WriteRequestError(\"data must serialise to a JSON object\");\n  }\n  const body = new TextEncoder().encode(text);\n  return {\n    body,\n    signedBytes: body,\n    contentType: \"application/json\",\n  };\n}\n\nasync function writeErrorFromResponse(\n  response: Response,\n): Promise<PersonalServerWriteError> {\n  const { errorCode, message, details } =\n    await readPersonalServerErrorBody(response);\n  const text =\n    message ??\n    `Personal Server write failed: ${response.status} ${response.statusText}`;\n  // Lineage rejections span 400 / 422 / 502; the code is the discriminator.\n  if (response.status === 422 || errorCode?.startsWith(\"LINEAGE_\")) {\n    return new WriteLineageError(text, response.status, errorCode, details);\n  }\n  switch (response.status) {\n    case 401:\n      return new WriteUnauthorizedError(text, errorCode, details);\n    case 403:\n      return new WriteForbiddenError(text, errorCode, details);\n    case 409:\n      return new WriteConflictError(text, errorCode, details);\n    default:\n      return new WriteRejectedError(text, response.status, errorCode, details);\n  }\n}\n\n/**\n * Write one record into a scope under an open write session.\n *\n * @remarks\n * Sends `POST /v1/data/:scope` with `Authorization: Bearer <session token>`\n * and `X-Vana-Write-Signature`, a Web3Signed proof over the stored\n * representation carrying the session's `grantId` as a signed claim. JSON\n * writes send `data` as compact JSON with `Content-Type: application/json`;\n * binary writes send the bytes with their `Content-Type`, `X-Filename`, and\n * sign {@link binaryWriteSignedBytes}. `lineage` is the record's top-level\n * `lineage` field for JSON and the `lineage` field of `X-Vana-Metadata` for\n * binary, so the proof covers it either way.\n *\n * @returns The ingest answer (`scope`, `collectedAt`, `status`, and\n *   `lineage.sources` when the write carried lineage).\n * @throws {WriteRequestError} Before sending: no payload, a reserved key, a\n *   malformed lineage id, or non-object data.\n * @throws {WriteSessionExpiredError} Before sending: the session token has\n *   passed its lifetime.\n * @throws {WriteUnauthorizedError} 401 (proof or session rejected).\n * @throws {WriteForbiddenError} 403 (grant no longer authorises the write).\n * @throws {WriteConflictError} 409.\n * @throws {WriteLineageError} Any `LINEAGE_*` rejection: 422\n *   `LINEAGE_SOURCE_UNKNOWN` (`details.unknown`), 400 `LINEAGE_INVALID` /\n *   `LINEAGE_SCOPE_UNDER_SOURCE_PREFIX`, 502 `LINEAGE_SOURCE_LOOKUP_FAILED`.\n * @throws {WriteRejectedError} Any other non-2xx.\n * @throws {WriteTransportError} `fetch` threw on every attempt.\n */\nexport async function writeData(\n  params: WriteDataParams,\n): Promise<WriteDataResult> {\n  const { session } = params;\n  if (!isWriteSession(session)) {\n    throw new WriteRequestError(\"session must come from openWriteSession\");\n  }\n  const fetchFn = resolveFetch(params.fetch);\n  if (typeof params.scope !== \"string\" || params.scope.length === 0) {\n    throw new WriteRequestError(\"scope is required\");\n  }\n  const prepared = prepareWrite(params);\n  if (Date.now() >= session.expiresAt) {\n    throw new WriteSessionExpiredError(\n      \"Write session has expired; open a new session\",\n      { grantId: session.grantId, expiresAt: session.expiresAt },\n    );\n  }\n\n  const path = dataPath(params.scope);\n  const response = await sendWithFreshProof(\n    `Write to ${params.scope}`,\n    fetchFn,\n    params.retry,\n    proofKeyFor({\n      aud: session.audience,\n      method: \"POST\",\n      uri: path,\n      grantId: session.grantId,\n      signedBytes: prepared.signedBytes,\n    }),\n    async (iat) => {\n      const headers = new Headers(params.headers);\n      headers.set(\"Content-Type\", prepared.contentType);\n      headers.set(\"Authorization\", `Bearer ${session.accessToken}`);\n      if (prepared.filename) {\n        setFilenameHeader(headers, prepared.filename);\n      }\n      if (prepared.metadataHeader !== undefined) {\n        headers.set(WRITE_METADATA_HEADER, prepared.metadataHeader);\n      }\n      headers.set(\n        WRITE_SIGNATURE_HEADER,\n        await buildWeb3SignedHeader({\n          signMessage: session.signer.signMessage,\n          aud: session.audience,\n          method: \"POST\",\n          uri: path,\n          body: prepared.signedBytes,\n          grantId: session.grantId,\n          iat,\n        }),\n      );\n      return {\n        url: `${session.personalServerUrl}${path}`,\n        init: {\n          method: \"POST\",\n          headers,\n          body: prepared.body as unknown as BodyInit,\n        },\n      };\n    },\n  );\n\n  if (!response.ok) {\n    throw await writeErrorFromResponse(response);\n  }\n  let body: unknown;\n  try {\n    body = await response.json();\n  } catch (err) {\n    throw new WriteRejectedError(\n      \"Personal Server write response is not JSON\",\n      response.status,\n      null,\n      { cause: errorMessage(err) },\n    );\n  }\n  const parsed = WriteDataResultSchema.safeParse(body);\n  if (!parsed.success) {\n    throw new WriteRejectedError(\n      \"Personal Server write response is not an ingest result\",\n      response.status,\n      null,\n      { issues: parsed.error.issues },\n    );\n  }\n  return parsed.data as WriteDataResult;\n}\n\ntype DistributiveOmit<T, K extends PropertyKey> = T extends unknown\n  ? Omit<T, K>\n  : never;\n\nexport type WritePersonalServerDataParams = Omit<\n  OpenWriteSessionParams,\n  \"fetch\" | \"headers\" | \"retry\"\n> &\n  DistributiveOmit<WriteDataParams, \"session\">;\n\n/** {@link writePersonalServerData}'s answer: the ingest result plus the session it opened. */\nexport interface WritePersonalServerDataResult extends WriteDataResult {\n  /** Reuse for further writes until `expiresAt`. */\n  session: WriteSession;\n}\n\n/**\n * Open a write session and write one record in a single call.\n *\n * @remarks\n * Equivalent to {@link openWriteSession} followed by {@link writeData}. The\n * session is returned so further writes can reuse it; opening one per write\n * is correct but costs an extra signature and round-trip each time.\n *\n * @throws Everything {@link openWriteSession} and {@link writeData} throw.\n */\nexport async function writePersonalServerData(\n  params: WritePersonalServerDataParams,\n): Promise<WritePersonalServerDataResult> {\n  const session = await openWriteSession({\n    personalServerUrl: params.personalServerUrl,\n    signer: params.signer,\n    grantId: params.grantId,\n    account: params.account,\n    audience: params.audience,\n    fetch: params.fetch,\n    headers: params.headers,\n    retry: params.retry,\n  });\n  const writeParams = { ...params, session } as WriteDataParams;\n  const result = await writeData(writeParams);\n  return { ...result, session };\n}\n", "/**\n * Transport shared by every builder call that authenticates with the\n * Personal Server Write API: the data writes of\n * {@link ../protocol/personal-server-write} and the derivative question\n * routes of {@link ../protocol/derivative-questions}.\n *\n * @remarks\n * Both sign a single-use Web3Signed proof per request, so both need the same\n * two things: a `fetch` wrapper that re-signs on every transport attempt, and\n * one process-wide record of the `iat` seconds already issued, so two proofs\n * for the same request identity can never come out byte-identical (the server\n * would reject the second as a replay). The record must be shared, not\n * per-module: a builder that polls one question every few milliseconds signs\n * the same `{ aud, method, uri, bodyHash, grantId }` many times a second.\n *\n * @internal\n */\n\nimport { sha256 } from \"@noble/hashes/sha2\";\nimport { bytesToHex } from \"viem\";\nimport { WriteRequestError, WriteTransportError } from \"../errors\";\n\n/**\n * Transport-level retry knobs shared by every Write API call.\n *\n * @remarks\n * Applies only when `fetch` **throws** (connection reset, DNS, a relay drop).\n * Every attempt signs a fresh proof, because the Personal Server consumes a\n * proof the moment it accepts it. A received HTTP response is never retried:\n * a 4xx/5xx is surfaced as a typed error.\n * @category Protocol\n */\nexport interface WriteTransportRetryOptions {\n  /** Total attempts including the first (default 3). `1` disables retries. */\n  attempts?: number;\n  /** Delay before the first retry (ms); doubles per retry (default 1_000). */\n  initialDelayMs?: number;\n}\n\n/** Strip trailing slashes so a base URL concatenates with a path. */\nexport function normalizeBaseUrl(url: string): string {\n  return url.replace(/\\/+$/, \"\");\n}\n\n/** The caller's `fetch`, else the global one. */\nexport function resolveFetch(fetchFn: typeof fetch | undefined): typeof fetch {\n  const resolved = fetchFn ?? globalThis.fetch;\n  if (resolved === undefined) {\n    throw new WriteRequestError(\"No fetch implementation available\");\n  }\n  return resolved;\n}\n\nexport function errorMessage(err: unknown): string {\n  return err instanceof Error ? err.message : String(err);\n}\n\nexport function finiteOr(value: number | undefined, fallback: number): number {\n  return typeof value === \"number\" && Number.isFinite(value) ? value : fallback;\n}\n\nexport function sleep(ms: number): Promise<void> {\n  return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/**\n * The Personal Server consumes every proof it accepts, and a Web3Signed\n * payload is fully determined by `{ aud, method, uri, bodyHash, grantId, iat,\n * exp }`, so two proofs for the same request signed within one second would\n * be byte-identical and the second rejected as a replay. Remember the\n * highest `iat` issued per request identity in this process and bump past\n * it when a second proof for the same identity falls inside the same second.\n *\n * A mark is kept for as long as the server can still remember the proof it\n * guards (its lifetime plus the verifier's clock skew), so a proof is never\n * re-issued while it could still be rejected as a replay: not by a burst,\n * and not by a wall clock stepping backwards (an identical request after a\n * step back waits for the clock instead of reusing the mark). Marks are\n * bucketed by their `iat` second, so pruning (once per second) only touches\n * the buckets that fell out of the retention window: the work per proof is\n * amortised constant and the map is bounded by the distinct requests signed\n * in the window.\n */\nconst issuedProofIats = new Map<string, number>();\n/** `iat` second -> identities whose current mark is that second. */\nconst issuedProofBuckets = new Map<number, Set<string>>();\nlet issuedProofIatsPrunedAtSec = 0;\n/** `buildWeb3SignedHeader`'s default `exp - iat`. */\nconst WEB3_SIGNED_PROOF_LIFETIME_SECONDS = 300;\n/** The verifier's tolerated clock skew (`verifyWeb3Signed`). */\nconst WEB3_SIGNED_CLOCK_SKEW_SECONDS = 60;\nconst PROOF_IAT_RETENTION_SECONDS =\n  WEB3_SIGNED_PROOF_LIFETIME_SECONDS + WEB3_SIGNED_CLOCK_SKEW_SECONDS;\n/**\n * How far ahead of the clock a bumped `iat` may run when the proof is sent.\n * The verifier tolerates 60 s of skew. A burst of identical requests that\n * would need to run further ahead waits for the clock instead, so a proof is\n * never repeated; sustained identical requests are throttled to one per\n * second after a burst of this many.\n */\nconst PROOF_IAT_MAX_AHEAD_SECONDS = 30;\n\nfunction pruneIssuedProofIats(nowSec: number): void {\n  if (issuedProofIatsPrunedAtSec === nowSec) return;\n  issuedProofIatsPrunedAtSec = nowSec;\n  const cutoff = nowSec - PROOF_IAT_RETENTION_SECONDS;\n  // There is at most one bucket per second in the window, so this walk is\n  // bounded by the window length, not by the number of marks.\n  for (const [sec, keys] of issuedProofBuckets) {\n    if (sec >= cutoff) continue;\n    for (const key of keys) issuedProofIats.delete(key);\n    issuedProofBuckets.delete(sec);\n  }\n}\n\nfunction setIssuedProofIat(key: string, iat: number, previous?: number): void {\n  if (previous !== undefined) {\n    const bucket = issuedProofBuckets.get(previous);\n    bucket?.delete(key);\n    if (bucket?.size === 0) issuedProofBuckets.delete(previous);\n  }\n  issuedProofIats.set(key, iat);\n  let bucket = issuedProofBuckets.get(iat);\n  if (bucket === undefined) {\n    bucket = new Set();\n    issuedProofBuckets.set(iat, bucket);\n  }\n  bucket.add(key);\n}\n\n/**\n * Reserve the next `iat` for a request identity. The reservation is made\n * synchronously so concurrent callers never share a value; the returned\n * promise only waits when the reserved `iat` is further ahead of the clock\n * than {@link PROOF_IAT_MAX_AHEAD_SECONDS}.\n */\nexport function nextProofIat(proofKey: string): Promise<number> {\n  const nowSec = Math.floor(Date.now() / 1000);\n  pruneIssuedProofIats(nowSec);\n  const last = issuedProofIats.get(proofKey);\n  const iat = last === undefined ? nowSec : Math.max(nowSec, last + 1);\n  setIssuedProofIat(proofKey, iat, last);\n  const waitSec = iat - nowSec - PROOF_IAT_MAX_AHEAD_SECONDS;\n  if (waitSec <= 0) return Promise.resolve(iat);\n  return sleep(waitSec * 1000).then(() => iat);\n}\n\n/**\n * A fresh `nonce` claim for one proof.\n *\n * @remarks\n * The Personal Server keys its replay guard on `(builder, nonce)` when a\n * proof carries a nonce, and on the whole proof when it does not. A nonce is\n * therefore what makes two identical requests signed inside the same second\n * distinct instead of the second being refused as a replay, which is the\n * difference between a poll loop that works and one that dies on its second\n * pass. Every question call sends one.\n */\nexport function freshProofNonce(): string {\n  const webCrypto = globalThis.crypto;\n  if (typeof webCrypto?.randomUUID === \"function\") {\n    return webCrypto.randomUUID();\n  }\n  // Older runtimes expose getRandomValues without randomUUID; 16 random bytes\n  // are the same uniqueness with a different spelling.\n  if (typeof webCrypto?.getRandomValues === \"function\") {\n    return bytesToHex(webCrypto.getRandomValues(new Uint8Array(16)));\n  }\n  throw new WriteRequestError(\n    \"No secure random source available to build a proof nonce; provide a crypto global\",\n  );\n}\n\n/** The identity a proof is deduplicated by. */\nexport function proofKeyFor(parts: {\n  aud: string;\n  method: string;\n  uri: string;\n  grantId: string;\n  signedBytes?: Uint8Array;\n}): string {\n  // A digest, so a retained mark costs a fixed amount of memory whatever the\n  // request looked like.\n  return bytesToHex(\n    sha256(\n      new TextEncoder().encode(\n        JSON.stringify([\n          parts.aud,\n          parts.method,\n          parts.uri,\n          parts.grantId,\n          parts.signedBytes ? bytesToHex(sha256(parts.signedBytes)) : \"\",\n        ]),\n      ),\n    ),\n  );\n}\n\n/**\n * Send a request, re-signing it on every attempt. Only a thrown `fetch` is\n * retried; the proof builder and any received response are never retried.\n */\nexport async function sendWithFreshProof(\n  label: string,\n  fetchFn: typeof fetch,\n  options: WriteTransportRetryOptions | undefined,\n  proofKey: string,\n  build: (iat: number) => Promise<{ url: string; init: RequestInit }>,\n): Promise<Response> {\n  const attempts = Math.max(1, Math.floor(finiteOr(options?.attempts, 3)));\n  let delayMs = Math.max(0, finiteOr(options?.initialDelayMs, 1_000));\n  let lastError: unknown;\n  for (let attempt = 0; attempt < attempts; attempt++) {\n    const { url, init } = await build(await nextProofIat(proofKey));\n    try {\n      return await fetchFn(url, init);\n    } catch (err) {\n      lastError = err;\n    }\n    if (attempt < attempts - 1) {\n      await sleep(delayMs);\n      delayMs *= 2;\n    }\n  }\n  throw new WriteTransportError(\n    `${label} failed after ${attempts} attempt(s): ${errorMessage(lastError)}`,\n    attempts,\n    lastError,\n  );\n}\n", "/**\n * Builder-side client for the Personal Server derivative question API.\n *\n * @remarks\n * A question is a standing prompt over the owner's source scopes. The\n * Personal Server answers it locally (the raw sources never leave the\n * machine except through its inference call) and writes the answer into the\n * derived scope as an ordinary derivative record, with lineage pointing at\n * the sources. The builder then reads the derived scope with its normal read\n * grant. Every source change re-runs the question, so a builder registers it\n * once and keeps reading a scope that stays up to date.\n *\n * One grant carries the whole pipeline, and it needs all three of:\n *\n * - a bare read entry for every source scope (the answer exposes them, so\n *   the server refuses the registration otherwise:\n *   `DERIVATIVE_SOURCE_NOT_GRANTED`),\n * - a bare read entry for the derived scope (to read the answer back),\n * - `write:<derivedScope>` (the credential the question routes authorize\n *   against).\n *\n * Authentication is the Write API's, with no new credential: the write\n * session bearer from {@link openWriteSession} plus a fresh, single-use\n * `X-Vana-Write-Signature` Web3Signed proof over every request, carrying the\n * grant id as a signed claim. These helpers own that: they open one session\n * per `{ signer, Personal Server, grant }`, reuse it across calls, sign a new\n * proof per request, and re-open the session once when a call comes back a\n * 401 the session is responsible for (the Personal Server keeps sessions in\n * memory and forgets them when it restarts; a 401 about the PROOF is\n * surfaced as it is, since a new session would not change it).\n *\n * Two rules govern the proof on these routes, and both are the server's\n * (`personal-server-ts` d91124d and later):\n *\n * - the signed `uri` claim covers the query string, not just the path,\n *   because `?derivedScope=` is what the list route authorizes against;\n * - every call carries a fresh `nonce` claim, which becomes the server's\n *   replay key. Without one the whole proof is the key, so two identical\n *   polls signed inside the same second are refused as a replay.\n *\n * @category Protocol\n */\n\nimport { z } from \"zod\";\nimport { buildWeb3SignedHeader } from \"../auth/web3-signed-builder\";\nimport {\n  DerivativeComputeUnavailableError,\n  DerivativeCycleError,\n  DerivativeDerivedScopeRequiredError,\n  DerivativeQuestionFailedError,\n  DerivativeQuestionInvalidError,\n  DerivativeQuestionNotFoundError,\n  DerivativeQuestionRejectedError,\n  DerivativeQuestionTimeoutError,\n  DerivativeSourceNotGrantedError,\n  WriteConflictError,\n  WriteForbiddenError,\n  WriteRequestError,\n  WriteUnauthorizedError,\n  type PersonalServerWriteError,\n} from \"../errors\";\nimport { assertDerivedScopeNaming } from \"./lineage\";\nimport {\n  readPersonalServerErrorBody,\n  type PersonalServerErrorBody,\n} from \"./personal-server-error-body\";\nimport {\n  readPersonalServerData,\n  type ReadPersonalServerDataParams,\n} from \"./personal-server-data\";\nimport type { DataFileEnvelope } from \"./data-file\";\nimport {\n  openWriteSession,\n  WRITE_SIGNATURE_HEADER,\n  type WriteSession,\n} from \"./personal-server-write\";\nimport {\n  errorMessage,\n  freshProofNonce,\n  normalizeBaseUrl,\n  proofKeyFor,\n  resolveFetch,\n  sendWithFreshProof,\n  sleep,\n  type WriteTransportRetryOptions,\n} from \"./write-request\";\nimport {\n  resolveWriteSigner,\n  type ResolveWriteSignerOptions,\n  type WriteSignerSource,\n} from \"./write-signer\";\n\n/** Path the question routes are mounted at. */\nexport const DERIVATIVE_QUESTIONS_PATH = \"/v1/derivatives/questions\";\n/** The most source scopes one question may read. */\nexport const MAX_QUESTION_SOURCE_SCOPES = 16;\n/** The longest question text the Personal Server accepts. */\nexport const MAX_QUESTION_CHARS = 8_000;\n/** The longest model id the Personal Server accepts. */\nexport const MAX_QUESTION_MODEL_CHARS = 128;\n/** Model ids as providers spell them (`z-ai/glm-5.2`, `gpt-4o-mini`, ...). */\nconst MODEL_ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._:/-]*$/;\n/** How long {@link waitForQuestion} polls before giving up. */\nexport const DEFAULT_QUESTION_TIMEOUT_MS = 120_000;\n/** How long {@link waitForQuestion} waits between polls. */\nexport const DEFAULT_QUESTION_POLL_INTERVAL_MS = 2_000;\n/** Re-open a session this long before its token expires. */\nconst SESSION_REFRESH_SKEW_MS = 30_000;\n\n/** Every state a question can be in. */\nexport const QUESTION_STATUSES = [\n  \"pending\",\n  \"ready\",\n  \"failed\",\n  \"stale\",\n] as const;\n\n/**\n * `pending` (never computed) -> `ready` | `failed`; a source change or an\n * explicit recompute puts a computed question back to `stale`, which\n * settles as `ready` or `failed` again.\n */\n/**\n * Every failure class a question can carry. A closed vocabulary, because the\n * status route serves it to a reader of the derived scope: it never carries a\n * scope name, the question or provider detail.\n *\n * - `inference_unavailable` \u2014 the provider or relay failed. The only\n *   transient class: the Personal Server retries it on its own.\n * - `source_missing` \u2014 a source scope is deleted or holds no local data.\n * - `grant_invalid` \u2014 the registering builder's grant no longer covers what\n *   the question reads.\n * - `internal` \u2014 anything else, including a permanent provider 4xx.\n */\nexport const DERIVATIVE_ERROR_CODES = [\n  \"inference_unavailable\",\n  \"source_missing\",\n  \"grant_invalid\",\n  \"internal\",\n] as const;\n\n/** @see {@link DERIVATIVE_ERROR_CODES} */\nexport const DerivativeErrorCodeSchema = z.enum(DERIVATIVE_ERROR_CODES);\n\n/** @see {@link DERIVATIVE_ERROR_CODES} */\nexport type DerivativeErrorCode = z.infer<typeof DerivativeErrorCodeSchema>;\n\nexport const QuestionStatusSchema = z.enum(QUESTION_STATUSES);\n\n/** @see {@link QuestionStatusSchema} */\nexport type QuestionStatus = z.infer<typeof QuestionStatusSchema>;\n\n/** Who registered the question: the owner, or a builder under a grant. */\nexport const QuestionRegisteredBySchema = z.union([\n  z.object({ kind: z.literal(\"owner\") }),\n  z.object({\n    kind: z.literal(\"builder\"),\n    builder: z.string(),\n    grantId: z.string(),\n  }),\n]);\n\n/** @see {@link QuestionRegisteredBySchema} */\nexport type QuestionRegisteredBy = z.infer<typeof QuestionRegisteredBySchema>;\n\n// The server always sends these; `nullish` keeps a Personal Server that\n// omits one readable rather than failing the whole call on a missing field.\nconst nullableString = z\n  .string()\n  .nullish()\n  .transform((value) => value ?? null);\n\n/**\n * A question registration as the Personal Server reports it (the answer of\n * register, get and list).\n */\nexport const DerivativeQuestionSchema = z.object({\n  questionId: z.string().min(1),\n  derivedScope: z.string().min(1),\n  sourceScopes: z.array(z.string()),\n  question: z.string(),\n  /** The model override, or `null` for the server's default. */\n  model: nullableString,\n  registeredBy: QuestionRegisteredBySchema,\n  status: QuestionStatusSchema,\n  /** A short reason, set only while `status` is `failed`. */\n  error: nullableString,\n  /**\n   * The coarse failure class behind `error`, set only while `status` is\n   * `failed`. `null` from a Personal Server that predates the class\n   * (`personal-server-ts` before the status route).\n   */\n  errorCode: DerivativeErrorCodeSchema.nullish().transform(\n    (value) => value ?? null,\n  ),\n  createdAt: z.string(),\n  updatedAt: nullableString,\n  /** When the last compute finished, or `null` while `pending`. */\n  lastComputedAt: nullableString,\n  /** Local version of the derived record the last compute wrote. */\n  derivedVersion: z\n    .number()\n    .nullish()\n    .transform((value) => value ?? null),\n  derivedCollectedAt: nullableString,\n});\n\n/** @see {@link DerivativeQuestionSchema} */\nexport type DerivativeQuestion = z.infer<typeof DerivativeQuestionSchema>;\n\nconst QuestionListSchema = z.object({\n  questions: z.array(DerivativeQuestionSchema),\n});\n\n/**\n * The 202 answer of a recompute request: the same registration view every\n * other question route answers, so a client needs one schema.\n *\n * @remarks\n * Older Personal Servers answered only\n * `{ questionId, derivedScope, status }` here. The full view is a superset\n * of those three fields, so code reading them is unaffected, but the answer\n * of a server before `personal-server-ts` d91124d no longer parses.\n */\nexport const QuestionRecomputeResultSchema = DerivativeQuestionSchema;\n\n/** @see {@link QuestionRecomputeResultSchema} */\nexport type QuestionRecomputeResult = DerivativeQuestion;\n\n/** The answer of a delete request. */\nexport const QuestionDeleteResultSchema = z.object({\n  questionId: z.string().min(1),\n  deleted: z.literal(true),\n});\n\n/** @see {@link QuestionDeleteResultSchema} */\nexport type QuestionDeleteResult = z.infer<typeof QuestionDeleteResultSchema>;\n\n/**\n * Connection, credential and transport shared by every question call.\n *\n * @remarks\n * The write session is opened on demand and reused for every later call\n * made with the same `signer` object, Personal Server, audience, grant and\n * `fetch`; a 401 re-opens it once and replays the call.\n */\nexport interface DerivativeQuestionAuthParams extends ResolveWriteSignerOptions {\n  /** Personal Server origin, e.g. `https://ps.example.com`. */\n  personalServerUrl: string;\n  /** Builder key: a viem `LocalAccount`, `WalletClient`, or `{ signMessage }`. */\n  signer: WriteSignerSource;\n  /**\n   * The grant the call runs under. It must carry `write:<derivedScope>`, a\n   * bare read entry for the derived scope, and a bare read entry for every\n   * source scope.\n   */\n  grantId: string;\n  /** Web3Signed audience; defaults to `personalServerUrl`. */\n  audience?: string;\n  /** `fetch` to use; defaults to `globalThis.fetch`. */\n  fetch?: typeof fetch;\n  /** Extra request headers. */\n  headers?: HeadersInit;\n  retry?: WriteTransportRetryOptions;\n  /** Aborts the request (and, for {@link waitForQuestion}, the polling). */\n  signal?: AbortSignal;\n}\n\nexport interface RegisterQuestionParams extends DerivativeQuestionAuthParams {\n  /**\n   * The scope the answer is written into. Must not share its first\n   * dot-segment with any source scope, so put derivatives in the app's own\n   * namespace.\n   */\n  derivedScope: string;\n  /**\n   * The scopes the question reads: 1 to\n   * {@link MAX_QUESTION_SOURCE_SCOPES} distinct scopes, none of them the\n   * derived scope. They do not have to hold data yet: the question computes\n   * once they do.\n   */\n  sourceScopes: readonly string[];\n  /** The prompt, 1 to {@link MAX_QUESTION_CHARS} characters. */\n  question: string;\n  /** Model id override; omitted = the Personal Server's default model. */\n  model?: string;\n}\n\nexport interface GetQuestionParams extends DerivativeQuestionAuthParams {\n  questionId: string;\n}\n\nexport interface ListQuestionsParams extends DerivativeQuestionAuthParams {\n  /**\n   * The derived scope to list. A builder must name one (it may only see its\n   * own questions on a scope it may write); the unfiltered list is the\n   * owner's.\n   */\n  derivedScope: string;\n}\n\nexport interface RecomputeQuestionParams extends DerivativeQuestionAuthParams {\n  questionId: string;\n}\n\nexport interface DeleteQuestionParams extends DerivativeQuestionAuthParams {\n  questionId: string;\n}\n\nexport interface WaitForQuestionParams extends DerivativeQuestionAuthParams {\n  questionId: string;\n  /** Give up after this long (default {@link DEFAULT_QUESTION_TIMEOUT_MS}). */\n  timeoutMs?: number;\n  /** Wait between polls (default {@link DEFAULT_QUESTION_POLL_INTERVAL_MS}). */\n  pollIntervalMs?: number;\n}\n\nexport interface AskPersonalServerParams extends RegisterQuestionParams {\n  timeoutMs?: number;\n  pollIntervalMs?: number;\n}\n\n/** {@link askPersonalServer}'s answer. */\nexport interface AskPersonalServerResult {\n  /** The settled registration (`status` is `ready`). */\n  registration: DerivativeQuestion;\n  /** The derived record the Personal Server wrote and the builder just read. */\n  record: DataFileEnvelope;\n}\n\n/**\n * Open write sessions, keyed by the signer object so a session is never\n * shared between builder keys and nothing is retained once the caller drops\n * its signer.\n */\nconst sessionsBySigner = new WeakMap<object, Map<string, WriteSession>>();\n\nfunction sessionCacheKey(\n  personalServerUrl: string,\n  audience: string,\n  grantId: string,\n  fetchFn: typeof fetch,\n): string {\n  // The token is only valid on the server that minted it, and `fetch` is\n  // what decides which server that is (a test double, a proxy, the global).\n  return (\n    JSON.stringify([personalServerUrl, audience, grantId]) + fetchIdOf(fetchFn)\n  );\n}\n\nconst fetchIds = new WeakMap<object, number>();\nlet nextFetchId = 0;\n\nfunction fetchIdOf(fetchFn: typeof fetch): string {\n  let id = fetchIds.get(fetchFn);\n  if (id === undefined) {\n    id = ++nextFetchId;\n    fetchIds.set(fetchFn, id);\n  }\n  return `#${id}`;\n}\n\ninterface ResolvedQuestionRequest {\n  baseUrl: string;\n  audience: string;\n  fetchFn: typeof fetch;\n  cacheKey: string;\n  signerKey: object;\n}\n\nfunction resolveRequest(\n  params: DerivativeQuestionAuthParams,\n): ResolvedQuestionRequest {\n  if (\n    typeof params.personalServerUrl !== \"string\" ||\n    params.personalServerUrl.length === 0\n  ) {\n    throw new WriteRequestError(\"personalServerUrl is required\");\n  }\n  // Checked before anything is signed or sent: without a grant the Personal\n  // Server has nothing to authorize the call against.\n  if (typeof params.grantId !== \"string\" || params.grantId.length === 0) {\n    throw new WriteRequestError(\n      \"grantId is required; a question call runs under the grant carrying write:<derivedScope>\",\n    );\n  }\n  if (params.signer === null || typeof params.signer !== \"object\") {\n    throw new WriteRequestError(\n      \"signer must be a viem LocalAccount, a viem WalletClient, or a { signMessage } object\",\n    );\n  }\n  const fetchFn = resolveFetch(params.fetch);\n  const baseUrl = normalizeBaseUrl(params.personalServerUrl);\n  const audience = params.audience ?? baseUrl;\n  return {\n    baseUrl,\n    audience,\n    fetchFn,\n    cacheKey: sessionCacheKey(baseUrl, audience, params.grantId, fetchFn),\n    signerKey: params.signer,\n  };\n}\n\n/**\n * The session to use: the cached one while it is comfortably live, else a\n * fresh handshake. `force` drops the cached one first (the 401 path).\n */\nasync function resolveSession(\n  params: DerivativeQuestionAuthParams,\n  resolved: ResolvedQuestionRequest,\n  force: boolean,\n): Promise<WriteSession> {\n  let cache = sessionsBySigner.get(resolved.signerKey);\n  if (cache === undefined) {\n    cache = new Map();\n    sessionsBySigner.set(resolved.signerKey, cache);\n  }\n  const cached = cache.get(resolved.cacheKey);\n  if (\n    !force &&\n    cached !== undefined &&\n    cached.expiresAt > Date.now() + SESSION_REFRESH_SKEW_MS\n  ) {\n    return cached;\n  }\n  if (force) cache.delete(resolved.cacheKey);\n  const session = await openWriteSession({\n    personalServerUrl: resolved.baseUrl,\n    signer: params.signer,\n    grantId: params.grantId,\n    account: params.account,\n    audience: resolved.audience,\n    fetch: resolved.fetchFn,\n    headers: params.headers,\n    retry: params.retry,\n  });\n  cache.set(resolved.cacheKey, session);\n  return session;\n}\n\n/**\n * The 401s a re-handshake cannot fix. They are failures of the per-request\n * PROOF, not of the session, so the same call signed under a brand new\n * session fails exactly the same way: replaying it would burn a second\n * proof, add a pointless handshake, and report the wrong problem. Every\n * other 401 is treated as the session the Personal Server forgot.\n */\nconst PROOF_FAILURE_CODES = new Set([\n  \"WRITE_ATTRIBUTION_REQUIRED\",\n  \"WRITE_ATTRIBUTION_INVALID\",\n  \"WRITE_ATTRIBUTION_SIGNER_MISMATCH\",\n  \"WRITE_ATTRIBUTION_GRANT_MISMATCH\",\n  \"WRITE_ATTRIBUTION_REPLAY\",\n]);\n\nfunction isStaleSession(errorCode: string | null): boolean {\n  return errorCode === null || !PROOF_FAILURE_CODES.has(errorCode);\n}\n\n/**\n * Map a non-2xx question answer onto the SDK's typed errors. `body` is the\n * already-read error body, for the caller that had to peek at it (a response\n * body can only be read once).\n */\nasync function questionErrorFromResponse(\n  response: Response,\n  body?: PersonalServerErrorBody,\n): Promise<PersonalServerWriteError> {\n  const { errorCode, message, details } =\n    body ?? (await readPersonalServerErrorBody(response));\n  const text =\n    message ??\n    `Derivative question request failed: ${response.status} ${response.statusText}`;\n  switch (errorCode) {\n    case \"DERIVATIVE_SOURCE_NOT_GRANTED\":\n      return new DerivativeSourceNotGrantedError(text, errorCode, details);\n    case \"DERIVATIVE_CYCLE\":\n      return new DerivativeCycleError(text, errorCode, details);\n    case \"DERIVATIVE_COMPUTE_UNAVAILABLE\":\n      return new DerivativeComputeUnavailableError(text, errorCode, details);\n    case \"DERIVATIVE_QUESTION_INVALID\":\n    case \"LINEAGE_SCOPE_UNDER_SOURCE_PREFIX\":\n      return new DerivativeQuestionInvalidError(\n        text,\n        response.status,\n        errorCode,\n        details,\n      );\n    case \"DERIVATIVE_QUESTION_NOT_FOUND\":\n      return new DerivativeQuestionNotFoundError(text, errorCode, details);\n    case \"DERIVATIVE_DERIVED_SCOPE_REQUIRED\":\n      return new DerivativeDerivedScopeRequiredError(text, errorCode, details);\n    default:\n      break;\n  }\n  switch (response.status) {\n    case 401:\n      return new WriteUnauthorizedError(text, errorCode, details);\n    case 403:\n      return new WriteForbiddenError(text, errorCode, details);\n    case 404:\n      return new DerivativeQuestionNotFoundError(text, errorCode, details);\n    case 409:\n      return new WriteConflictError(text, errorCode, details);\n    default:\n      return new DerivativeQuestionRejectedError(\n        text,\n        response.status,\n        errorCode,\n        details,\n      );\n  }\n}\n\n/**\n * The typed error for a non-2xx answer of any `/v1/derivatives` route.\n *\n * @remarks\n * Shared with the reader-facing status client so both surfaces map the same\n * `errorCode` to the same error class. Not part of the package's public API.\n *\n * @internal\n */\nexport const personalServerErrorFromQuestionResponse =\n  questionErrorFromResponse;\n\ninterface QuestionRequestSpec {\n  method: \"GET\" | \"POST\" | \"DELETE\";\n  /**\n   * The whole request target, path AND query string. The Personal Server\n   * verifies the proof against it (the query decides the authorization on\n   * the list route), so it is built once and used for both the signed `uri`\n   * claim and the `fetch` URL, where the two cannot drift apart.\n   */\n  target: string;\n  /** JSON body; sent (and signed) as compact JSON. */\n  body?: Record<string, unknown>;\n  label: string;\n}\n\nasync function sendOnce(\n  params: DerivativeQuestionAuthParams,\n  resolved: ResolvedQuestionRequest,\n  session: WriteSession,\n  spec: QuestionRequestSpec,\n  bodyBytes: Uint8Array | undefined,\n): Promise<Response> {\n  return sendWithFreshProof(\n    spec.label,\n    resolved.fetchFn,\n    params.retry,\n    proofKeyFor({\n      aud: session.audience,\n      method: spec.method,\n      uri: spec.target,\n      grantId: session.grantId,\n      signedBytes: bodyBytes,\n    }),\n    async (iat) => {\n      const headers = new Headers(params.headers);\n      headers.set(\"Accept\", \"application/json\");\n      headers.set(\"Authorization\", `Bearer ${session.accessToken}`);\n      if (bodyBytes !== undefined) {\n        headers.set(\"Content-Type\", \"application/json\");\n      }\n      headers.set(\n        WRITE_SIGNATURE_HEADER,\n        await buildWeb3SignedHeader({\n          signMessage: session.signer.signMessage,\n          aud: session.audience,\n          // The proof commits to the whole request target, query included:\n          // `?derivedScope=` is what the list route authorizes against, and a\n          // proof that did not cover it would authorize any other scope.\n          uri: spec.target,\n          method: spec.method,\n          body: bodyBytes,\n          grantId: session.grantId,\n          // Fresh per attempt, so a retry after a thrown `fetch` is never the\n          // proof the server may already have consumed, and so two identical\n          // polls inside one second stay distinct.\n          nonce: freshProofNonce(),\n          iat,\n        }),\n      );\n      return {\n        url: `${resolved.baseUrl}${spec.target}`,\n        init: {\n          method: spec.method,\n          headers,\n          ...(bodyBytes === undefined\n            ? {}\n            : { body: bodyBytes as unknown as BodyInit }),\n          ...(params.signal ? { signal: params.signal } : {}),\n        },\n      };\n    },\n  );\n}\n\n/**\n * Run one question call under a reused write session: fresh proof, and one\n * re-handshake when the Personal Server no longer knows the session.\n */\nasync function sendQuestionRequest<T>(\n  params: DerivativeQuestionAuthParams,\n  spec: QuestionRequestSpec,\n  schema: z.ZodType<T>,\n): Promise<T> {\n  const resolved = resolveRequest(params);\n  // Compact JSON is the contract: the server re-serializes what it parsed\n  // and refuses anything else with WRITE_BODY_NOT_CANONICAL.\n  const bodyBytes =\n    spec.body === undefined\n      ? undefined\n      : new TextEncoder().encode(JSON.stringify(spec.body));\n\n  let session = await resolveSession(params, resolved, false);\n  let response = await sendOnce(params, resolved, session, spec, bodyBytes);\n  // Read once, kept for the throw below: a body cannot be read twice.\n  let errorBody: PersonalServerErrorBody | undefined;\n  if (response.status === 401) {\n    errorBody = await readPersonalServerErrorBody(response);\n    if (isStaleSession(errorBody.errorCode)) {\n      // The Personal Server keeps write sessions in memory: a restart (or an\n      // expiry the client did not see) invalidates the bearer, not the grant.\n      // Open a new session once and replay the call with a fresh proof.\n      session = await resolveSession(params, resolved, true);\n      response = await sendOnce(params, resolved, session, spec, bodyBytes);\n      errorBody = undefined;\n    }\n  }\n\n  if (!response.ok) {\n    throw await questionErrorFromResponse(response, errorBody);\n  }\n  let body: unknown;\n  try {\n    body = await response.json();\n  } catch (err) {\n    throw new DerivativeQuestionRejectedError(\n      `${spec.label} response is not JSON`,\n      response.status,\n      null,\n      { cause: errorMessage(err) },\n    );\n  }\n  const parsed = schema.safeParse(body);\n  if (!parsed.success) {\n    throw new DerivativeQuestionRejectedError(\n      `${spec.label} response is not a derivative question answer`,\n      response.status,\n      null,\n      { issues: parsed.error.issues },\n    );\n  }\n  return parsed.data;\n}\n\n/** The request target for one question id: no query, so the bare path. */\nfunction assertQuestionId(questionId: string): string {\n  if (typeof questionId !== \"string\" || questionId.length === 0) {\n    throw new WriteRequestError(\"questionId is required\");\n  }\n  return `${DERIVATIVE_QUESTIONS_PATH}/${encodeURIComponent(questionId)}`;\n}\n\n/**\n * Validate a registration the way the Personal Server does, so a builder\n * gets a typed error before a proof is signed rather than a 400 after.\n */\nfunction registrationBody(params: RegisterQuestionParams): {\n  derivedScope: string;\n  sourceScopes: string[];\n  question: string;\n  model?: string;\n} {\n  const { derivedScope, question } = params;\n  if (typeof derivedScope !== \"string\" || derivedScope.length === 0) {\n    throw new WriteRequestError(\"derivedScope is required\");\n  }\n  if (!Array.isArray(params.sourceScopes) || params.sourceScopes.length === 0) {\n    throw new WriteRequestError(\n      \"sourceScopes must be a non-empty array of scopes\",\n    );\n  }\n  if (params.sourceScopes.length > MAX_QUESTION_SOURCE_SCOPES) {\n    throw new WriteRequestError(\n      `sourceScopes lists ${params.sourceScopes.length} scopes; the maximum is ${MAX_QUESTION_SOURCE_SCOPES}`,\n      { max: MAX_QUESTION_SOURCE_SCOPES, count: params.sourceScopes.length },\n    );\n  }\n  const sourceScopes: string[] = [];\n  for (const scope of params.sourceScopes) {\n    if (typeof scope !== \"string\" || scope.length === 0) {\n      throw new WriteRequestError(\"sourceScopes entries must be scope strings\");\n    }\n    if (sourceScopes.includes(scope)) {\n      throw new WriteRequestError(\"sourceScopes must not repeat a scope\", {\n        duplicate: scope,\n      });\n    }\n    if (scope === derivedScope) {\n      throw new WriteRequestError(\n        \"derivedScope cannot be one of its own sources\",\n        { scope },\n      );\n    }\n    sourceScopes.push(scope);\n  }\n  if (typeof question !== \"string\" || question.trim() === \"\") {\n    throw new WriteRequestError(\"question must be a non-empty string\");\n  }\n  if (question.length > MAX_QUESTION_CHARS) {\n    throw new WriteRequestError(\n      `question is ${question.length} characters; the maximum is ${MAX_QUESTION_CHARS}`,\n      { max: MAX_QUESTION_CHARS, length: question.length },\n    );\n  }\n  if (params.model !== undefined) {\n    if (\n      typeof params.model !== \"string\" ||\n      params.model.length > MAX_QUESTION_MODEL_CHARS ||\n      !MODEL_ID_PATTERN.test(params.model)\n    ) {\n      throw new WriteRequestError(\"model must be a provider model id\", {\n        model: params.model,\n      });\n    }\n  }\n  // The lineage naming rule, applied before signing: the server would refuse\n  // the registration with LINEAGE_SCOPE_UNDER_SOURCE_PREFIX.\n  assertDerivedScopeNaming(derivedScope, sourceScopes);\n  return {\n    derivedScope,\n    sourceScopes,\n    question,\n    ...(params.model === undefined ? {} : { model: params.model }),\n  };\n}\n\n/**\n * Register a standing question over the owner's source scopes.\n *\n * @remarks\n * Sends `POST /v1/derivatives/questions`. The registration comes back\n * `pending` and the first compute is scheduled immediately; poll it with\n * {@link waitForQuestion}, then read `derivedScope`.\n *\n * @example\n * ```typescript\n * const registered = await registerQuestion({\n *   personalServerUrl: \"https://ps.example.com\",\n *   signer,\n *   grantId,\n *   derivedScope: \"coach.weekly\",\n *   sourceScopes: [\"oura.sleep\", \"chatgpt.conversations\"],\n *   question: \"How did my sleep relate to my mood this week?\",\n * });\n * ```\n * @returns The registration, `status: \"pending\"`.\n * @throws {WriteRequestError} Before sending: a missing grant, a bad scope\n *   list, an over-long question, a derived scope under a source's namespace.\n * @throws {DerivativeSourceNotGrantedError} 403: a source scope is not\n *   read-granted to the builder (`details.scopes`).\n * @throws {DerivativeCycleError} 409: the question would make the derived\n *   scope a transitive source of itself.\n * @throws {DerivativeQuestionInvalidError} 400 from the server.\n * @throws {DerivativeComputeUnavailableError} 503: no compute layer.\n * @throws {WriteForbiddenError} 403: the grant does not authorize writing\n *   the derived scope.\n */\nexport async function registerQuestion(\n  params: RegisterQuestionParams,\n): Promise<DerivativeQuestion> {\n  const body = registrationBody(params);\n  return sendQuestionRequest(\n    params,\n    {\n      method: \"POST\",\n      target: DERIVATIVE_QUESTIONS_PATH,\n      body,\n      label: \"Register derivative question\",\n    },\n    DerivativeQuestionSchema,\n  );\n}\n\n/**\n * Read one question's current state.\n *\n * @remarks\n * Sends `GET /v1/derivatives/questions/:id`. A builder only sees questions\n * it registered itself; anything else is a 404.\n *\n * @returns The registration, including `status`, `lastComputedAt`,\n *   `derivedVersion` and (when it failed) `error`.\n * @throws {DerivativeQuestionNotFoundError} 404: unknown id, or not this\n *   builder's question.\n */\nexport async function getQuestion(\n  params: GetQuestionParams,\n): Promise<DerivativeQuestion> {\n  const target = assertQuestionId(params.questionId);\n  return sendQuestionRequest(\n    params,\n    { method: \"GET\", target, label: \"Read derivative question\" },\n    DerivativeQuestionSchema,\n  );\n}\n\n/**\n * List the questions this builder registered on a derived scope.\n *\n * @remarks\n * Sends `GET /v1/derivatives/questions?derivedScope=...`. The scope is\n * required for a builder: it is what the call is authorized against, which\n * is exactly why the signed proof commits to the query string as well as the\n * path. The target is built once and used for both, so the signature and the\n * request can never name different scopes.\n *\n * @returns The registrations, newest state included.\n * @throws {DerivativeDerivedScopeRequiredError} 400\n *   `DERIVATIVE_DERIVED_SCOPE_REQUIRED` when the server saw no\n *   `?derivedScope=` (the SDK refuses an empty one before sending).\n */\nexport async function listQuestions(\n  params: ListQuestionsParams,\n): Promise<DerivativeQuestion[]> {\n  if (\n    typeof params.derivedScope !== \"string\" ||\n    params.derivedScope.length === 0\n  ) {\n    throw new WriteRequestError(\n      \"derivedScope is required; a builder may only list its own questions on a scope it may write\",\n    );\n  }\n  const target = `${DERIVATIVE_QUESTIONS_PATH}?derivedScope=${encodeURIComponent(params.derivedScope)}`;\n  const { questions } = await sendQuestionRequest(\n    params,\n    {\n      method: \"GET\",\n      target,\n      label: \"List derivative questions\",\n    },\n    QuestionListSchema,\n  );\n  return questions;\n}\n\n/**\n * Ask the Personal Server to recompute a question now.\n *\n * @remarks\n * Sends `POST /v1/derivatives/questions/:id/recompute`, which answers 202\n * and schedules the compute immediately instead of after the usual quiet\n * period. Use it to retry a `failed` question; a source change recomputes on\n * its own.\n *\n * @returns The full registration view, with the status the question was put\n *   into (`pending` when it had never computed, else `stale`). Servers\n *   before `personal-server-ts` d91124d answered only\n *   `{ questionId, derivedScope, status }` here, which no longer parses.\n */\nexport async function recomputeQuestion(\n  params: RecomputeQuestionParams,\n): Promise<QuestionRecomputeResult> {\n  const target = `${assertQuestionId(params.questionId)}/recompute`;\n  return sendQuestionRequest(\n    params,\n    { method: \"POST\", target, label: \"Recompute derivative question\" },\n    QuestionRecomputeResultSchema,\n  );\n}\n\n/**\n * Delete a question registration.\n *\n * @remarks\n * Sends `DELETE /v1/derivatives/questions/:id`. The question stops\n * recomputing; the derived records it already wrote are left alone (delete\n * those through the data-point deletion path).\n *\n * @returns `{ questionId, deleted: true }`.\n */\nexport async function deleteQuestion(\n  params: DeleteQuestionParams,\n): Promise<QuestionDeleteResult> {\n  const target = assertQuestionId(params.questionId);\n  return sendQuestionRequest(\n    params,\n    { method: \"DELETE\", target, label: \"Delete derivative question\" },\n    QuestionDeleteResultSchema,\n  );\n}\n\n/** `true` once the question has settled: nothing more to wait for. */\nfunction isSettled(status: QuestionStatus): boolean {\n  return status === \"ready\" || status === \"failed\";\n}\n\nfunction abortError(signal: AbortSignal): Error {\n  const reason: unknown = signal.reason;\n  if (reason instanceof Error) return reason;\n  const error = new Error(\"The operation was aborted\");\n  error.name = \"AbortError\";\n  return error;\n}\n\n/**\n * Poll a question until it settles.\n *\n * @remarks\n * Calls {@link getQuestion} every `pollIntervalMs` until `status` is `ready`\n * or `failed` and returns that state; a `failed` question is returned, not\n * thrown, so the caller can read `error` and decide whether to\n * {@link recomputeQuestion}. All polls share the one write session and each\n * signs its own proof.\n *\n * @example\n * ```typescript\n * const settled = await waitForQuestion({\n *   personalServerUrl,\n *   signer,\n *   grantId,\n *   questionId: registered.questionId,\n *   timeoutMs: 60_000,\n * });\n * if (settled.status === \"ready\") {\n *   // read derivedScope\n * }\n * ```\n * @returns The settled registration (`ready` or `failed`).\n * @throws {DerivativeQuestionTimeoutError} The question had not settled\n *   within `timeoutMs`; it keeps computing on the server.\n * @throws Whatever {@link getQuestion} throws, and the `signal`'s abort\n *   reason when the caller aborts.\n */\nexport async function waitForQuestion(\n  params: WaitForQuestionParams,\n): Promise<DerivativeQuestion> {\n  const timeoutMs = Math.max(\n    0,\n    params.timeoutMs ?? DEFAULT_QUESTION_TIMEOUT_MS,\n  );\n  const pollIntervalMs = Math.max(\n    0,\n    params.pollIntervalMs ?? DEFAULT_QUESTION_POLL_INTERVAL_MS,\n  );\n  const deadline = Date.now() + timeoutMs;\n  for (;;) {\n    if (params.signal?.aborted) throw abortError(params.signal);\n    const latest = await getQuestion(params);\n    if (isSettled(latest.status)) return latest;\n    const remaining = deadline - Date.now();\n    if (remaining <= 0) {\n      throw new DerivativeQuestionTimeoutError(\n        `Derivative question ${latest.questionId} was still ${latest.status} after ${timeoutMs}ms`,\n        {\n          questionId: latest.questionId,\n          derivedScope: latest.derivedScope,\n          status: latest.status,\n          timeoutMs,\n        },\n      );\n    }\n    await sleep(Math.min(pollIntervalMs, remaining));\n  }\n}\n\n/**\n * Register a question, wait for it, and read the answer: the whole builder\n * loop in one call.\n *\n * @remarks\n * {@link registerQuestion} + {@link waitForQuestion} +\n * {@link readPersonalServerData} on the derived scope, which is why the\n * grant needs a bare read entry for `derivedScope` on top of\n * `write:<derivedScope>` and the source reads. The read is the plain\n * Web3Signed one; when the grant is priced, settle the 402 yourself with the\n * escrow-aware read from `@opendatalabs/vana-sdk/server` and use\n * {@link registerQuestion} and {@link waitForQuestion} directly.\n *\n * A question registered this way keeps recomputing after the call returns:\n * every later change to a source scope refreshes the derived record, and the\n * builder can read it again without registering anything.\n *\n * @example\n * ```typescript\n * const { registration, record } = await askPersonalServer({\n *   personalServerUrl: \"https://ps.example.com\",\n *   signer,\n *   grantId,\n *   derivedScope: \"coach.weekly\",\n *   sourceScopes: [\"oura.sleep\"],\n *   question: \"How did my sleep trend this week?\",\n * });\n * console.log(record.data.answer, registration.questionId);\n * ```\n * @returns The settled registration and the derived record.\n * @throws {DerivativeQuestionFailedError} The question settled as `failed`\n *   (`details.error` is the server's reason).\n * @throws Everything {@link registerQuestion}, {@link waitForQuestion} and\n *   the read path throw.\n */\nexport async function askPersonalServer(\n  params: AskPersonalServerParams,\n): Promise<AskPersonalServerResult> {\n  const registered = await registerQuestion(params);\n  const registration = await waitForQuestion({\n    ...params,\n    questionId: registered.questionId,\n  });\n  if (registration.status !== \"ready\") {\n    throw new DerivativeQuestionFailedError(\n      `Derivative question ${registration.questionId} failed: ${registration.error ?? \"no reason given\"}`,\n      {\n        questionId: registration.questionId,\n        derivedScope: registration.derivedScope,\n        error: registration.error,\n      },\n    );\n  }\n  const signer = resolveWriteSigner(params.signer, {\n    account: params.account,\n  });\n  const readParams: ReadPersonalServerDataParams = {\n    personalServerUrl: normalizeBaseUrl(params.personalServerUrl),\n    scope: params.derivedScope,\n    grantId: params.grantId,\n    signMessage: signer.signMessage,\n    ...(params.audience === undefined ? {} : { audience: params.audience }),\n    ...(params.headers === undefined ? {} : { headers: params.headers }),\n    ...(params.fetch === undefined ? {} : { fetch: params.fetch }),\n  };\n  const record = await readPersonalServerData(readParams);\n  return { registration, record };\n}\n", "/**\n * Derivative status: the lifecycle of the question behind a derived scope,\n * as the party that READS the answer sees it.\n *\n * @remarks\n * A builder registers a question with {@link registerQuestion} and follows it\n * with {@link waitForQuestion}, both of which need a write session. The app\n * that only consumes the answer holds no write entry at all \u2014 a consent flow\n * grants it a bare read on the derived scope \u2014 so it cannot open one, and\n * `GET /v1/data/<derivedScope>` answers 404 for all three of \"computing right\n * now\", \"failed but retrying\" and \"failed for good\".\n *\n * `GET /v1/derivatives/status?derivedScope=<scope>` is that reader's view.\n * Authorization is the data read's (a live grant covering the derived scope,\n * or the owner), nothing is served and nothing is charged, and the view is\n * deliberately narrow: lifecycle, a coarse {@link DerivativeErrorCode} and\n * the next retry. The question text, the source scopes, the question id, the\n * registrar and the server's raw error string stay owner-only.\n *\n * Requires `personal-server-ts` with the status route; an older Personal\n * Server answers 404 for the route itself.\n *\n * @category Protocol\n */\n\nimport { z } from \"zod\";\nimport { buildWeb3SignedHeader } from \"../auth/web3-signed-builder\";\nimport {\n  DerivativeQuestionRejectedError,\n  DerivativeQuestionTimeoutError,\n  WriteRequestError,\n  WriteTransportError,\n  type PersonalServerWriteError,\n} from \"../errors\";\nimport {\n  DerivativeErrorCodeSchema,\n  personalServerErrorFromQuestionResponse,\n  QuestionStatusSchema,\n  type QuestionStatus,\n} from \"./derivative-questions\";\nimport {\n  resolveWriteSigner,\n  type ResolveWriteSignerOptions,\n  type WriteSignerSource,\n} from \"./write-signer\";\n\nexport {\n  DERIVATIVE_ERROR_CODES,\n  DerivativeErrorCodeSchema,\n  type DerivativeErrorCode,\n} from \"./derivative-questions\";\n\n/** The reader-facing status route. */\nexport const DERIVATIVE_STATUS_PATH = \"/v1/derivatives/status\";\n\n/** How long {@link waitForDerivativeStatus} polls before giving up. */\nexport const DEFAULT_DERIVATIVE_STATUS_TIMEOUT_MS = 120_000;\n\n/**\n * How long {@link waitForDerivativeStatus} waits between polls when the\n * server names no retry time of its own.\n */\nexport const DEFAULT_DERIVATIVE_STATUS_POLL_INTERVAL_MS = 2_000;\n\nconst nullable = <T extends z.ZodTypeAny>(schema: T) =>\n  schema\n    .nullish()\n    .transform((value: z.infer<T> | null | undefined) => value ?? null);\n\n/**\n * The status of the derived scope, not of one registration: when several\n * questions write the same scope, the server reports the most optimistic\n * true state, because serving data is registration-agnostic.\n */\nexport const DerivativeStatusSchema = z.object({\n  derivedScope: z.string().min(1),\n  status: QuestionStatusSchema,\n  /** When the last compute finished, or `null` if none ever has. */\n  lastComputedAt: nullable(z.string()),\n  /** Local version of the derived record the last compute wrote. */\n  derivedVersion: nullable(z.number()),\n  derivedCollectedAt: nullable(z.string()),\n  /** The failure class; `null` unless `status` is `failed`. */\n  errorCode: nullable(DerivativeErrorCodeSchema),\n  /**\n   * Seconds until the Personal Server's next automatic retry, or `null` when\n   * none is pending or running \u2014 the terminal signature. Poll on this cadence\n   * rather than guessing one.\n   */\n  retryAfterSeconds: nullable(z.number()),\n});\n\n/** @see {@link DerivativeStatusSchema} */\nexport type DerivativeStatus = z.infer<typeof DerivativeStatusSchema>;\n\n/** What {@link getDerivativeStatus} needs to sign and send one read. */\nexport interface GetDerivativeStatusParams extends ResolveWriteSignerOptions {\n  /** Personal Server origin, e.g. `https://ps.example.com`. */\n  personalServerUrl: string;\n  /** The derived scope whose question to observe. */\n  derivedScope: string;\n  /**\n   * A grant covering the derived scope, sent as the signed `grantId` claim.\n   * Omit only when the signer is the Personal Server's owner, who is\n   * authorized without one.\n   */\n  grantId?: string;\n  /** Reader key: a viem `LocalAccount`, `WalletClient`, or `{ signMessage }`. */\n  signer: WriteSignerSource;\n  /** Web3Signed audience; defaults to `personalServerUrl`. */\n  audience?: string;\n  /** `fetch` to use; defaults to `globalThis.fetch`. */\n  fetch?: typeof fetch;\n  /** Extra request headers. */\n  headers?: HeadersInit;\n  /** Aborts the request in flight. */\n  signal?: AbortSignal;\n}\n\n/** What {@link waitForDerivativeStatus} polls with. */\nexport interface WaitForDerivativeStatusParams extends GetDerivativeStatusParams {\n  /** Give up after this long (default 120s). */\n  timeoutMs?: number;\n  /**\n   * Wait between polls when the server names no retry time (default 2s).\n   * A `retryAfterSeconds` from the server replaces this outright, longer or\n   * shorter: it is when the next compute actually happens.\n   */\n  pollIntervalMs?: number;\n  /**\n   * Aborts the wait, and the request in flight with it: the signal is passed\n   * to every poll, so an abort during a stalled request does not sit until\n   * the transport gives up.\n   */\n  signal?: AbortSignal;\n}\n\n/**\n * The request target for a status read: the query carries the derived scope,\n * the signed `uri` does not.\n *\n * @remarks\n * Like every Web3Signed read (data, lineage), the Personal Server verifies\n * the signature over the PATH; per-scope authorization is enforced live\n * against the caller's grant on each request, so the query needs no\n * signature to be safe. Only the write path signs path AND query, where a\n * parameter decides what is written.\n */\nexport function derivativeStatusTarget(derivedScope: string): string {\n  return `${DERIVATIVE_STATUS_PATH}?derivedScope=${encodeURIComponent(derivedScope)}`;\n}\n\nfunction normalizeBaseUrl(url: string): string {\n  return url.replace(/\\/+$/, \"\");\n}\n\nfunction resolveFetch(fetchFn: typeof fetch | undefined): typeof fetch {\n  const resolved = fetchFn ?? globalThis.fetch;\n  if (resolved === undefined) {\n    throw new WriteRequestError(\"No fetch implementation available\");\n  }\n  return resolved;\n}\n\nfunction requireDerivedScope(derivedScope: string): string {\n  if (typeof derivedScope !== \"string\" || derivedScope.length === 0) {\n    // The server answers 400 DERIVATIVE_DERIVED_SCOPE_REQUIRED; refuse before\n    // signing rather than spend a signature on a request that cannot pass.\n    throw new WriteRequestError(\"derivedScope is required\");\n  }\n  return derivedScope;\n}\n\nfunction sleep(ms: number, signal?: AbortSignal): Promise<void> {\n  if (ms <= 0) return Promise.resolve();\n  return new Promise((resolve, reject) => {\n    const timer = setTimeout(() => {\n      signal?.removeEventListener(\"abort\", onAbort);\n      resolve();\n    }, ms);\n    const onAbort = () => {\n      clearTimeout(timer);\n      reject(abortError(signal));\n    };\n    signal?.addEventListener(\"abort\", onAbort, { once: true });\n  });\n}\n\nfunction timeoutError(\n  latest: DerivativeStatus,\n  timeoutMs: number,\n): DerivativeQuestionTimeoutError {\n  return new DerivativeQuestionTimeoutError(\n    `Derived scope ${latest.derivedScope} was still ${latest.status} after ${timeoutMs}ms`,\n    {\n      derivedScope: latest.derivedScope,\n      status: latest.status,\n      errorCode: latest.errorCode,\n      retryAfterSeconds: latest.retryAfterSeconds,\n      timeoutMs,\n    },\n  );\n}\n\nfunction abortError(signal?: AbortSignal): Error {\n  const reason = signal?.reason;\n  return reason instanceof Error\n    ? reason\n    : new WriteRequestError(\"Derivative status wait was aborted\");\n}\n\n/**\n * Is this a state the reader can act on?\n *\n * @remarks\n * `ready` means the derived scope has an answer to read. A `failed` status\n * is settled only when no retry is pending: with `retryAfterSeconds` set the\n * Personal Server will compute again on its own, so the answer may still\n * arrive. `pending` and `stale` are always in flight.\n */\nexport function isDerivativeStatusSettled(status: DerivativeStatus): boolean {\n  if (status.status === \"ready\") return true;\n  return status.status === \"failed\" && status.retryAfterSeconds === null;\n}\n\n/**\n * Read the lifecycle of the question behind a derived scope.\n *\n * @remarks\n * Sends `GET /v1/derivatives/status?derivedScope=<scope>` with a Web3Signed\n * `Authorization` header carrying `grantId`, the same authentication a data\n * read uses. Nothing is charged: the route authorizes, it does not serve\n * data, so a priced grant raises no 402 here.\n *\n * @returns The status of the derived scope. When several registrations write\n *   it, the most optimistic true state answers \u2014 `ready`, then `stale`, then\n *   `pending`, then `failed` \u2014 because a duplicate that never wrote anything\n *   must not report away an answer the scope has.\n * @throws {DerivativeQuestionNotFoundError} 404: the caller may read the\n *   scope but no question stands behind it (and, on an older Personal\n *   Server, the route itself is unknown).\n * @throws {WriteForbiddenError} 403: the grant does not cover the derived\n *   scope. The check runs before any store lookup, so a caller cannot probe\n *   which scopes have questions.\n * @throws {DerivativeQuestionRejectedError} On any other non-2xx answer or\n *   an unparseable body.\n * @throws {WriteTransportError} When `fetch` itself failed.\n * @throws {WriteRequestError} On a missing `derivedScope` or no `fetch`.\n *\n * @example\n * ```typescript\n * const status = await getDerivativeStatus({\n *   personalServerUrl: \"https://ps.example.com\",\n *   derivedScope: \"coach.weekly\",\n *   grantId,\n *   signer,\n * });\n * if (status.status === \"ready\") {\n *   const record = await readPersonalServerData({ ... });\n * } else if (status.retryAfterSeconds !== null) {\n *   // Computing or retrying: come back then.\n * }\n * ```\n */\nexport async function getDerivativeStatus(\n  params: GetDerivativeStatusParams,\n): Promise<DerivativeStatus> {\n  const derivedScope = requireDerivedScope(params.derivedScope);\n  const fetchFn = resolveFetch(params.fetch);\n  const baseUrl = normalizeBaseUrl(params.personalServerUrl);\n  const signer = resolveWriteSigner(params.signer, { account: params.account });\n  const headers = new Headers(params.headers);\n  headers.set(\n    \"Authorization\",\n    await buildWeb3SignedHeader({\n      signMessage: signer.signMessage,\n      aud: params.audience ?? baseUrl,\n      method: \"GET\",\n      uri: DERIVATIVE_STATUS_PATH,\n      grantId: params.grantId,\n    }),\n  );\n\n  let response: Response;\n  try {\n    response = await fetchFn(\n      `${baseUrl}${derivativeStatusTarget(derivedScope)}`,\n      {\n        method: \"GET\",\n        headers,\n        ...(params.signal ? { signal: params.signal } : {}),\n      },\n    );\n  } catch (err) {\n    throw new WriteTransportError(\n      `Derivative status read failed: ${err instanceof Error ? err.message : String(err)}`,\n      1,\n      err,\n    );\n  }\n  if (!response.ok) {\n    throw (await personalServerErrorFromQuestionResponse(\n      response,\n    )) as PersonalServerWriteError;\n  }\n  let body: unknown;\n  try {\n    body = await response.json();\n  } catch (err) {\n    throw new DerivativeQuestionRejectedError(\n      \"Derivative status response is not JSON\",\n      response.status,\n      null,\n      { cause: err instanceof Error ? err.message : String(err) },\n    );\n  }\n  const parsed = DerivativeStatusSchema.safeParse(body);\n  if (!parsed.success) {\n    throw new DerivativeQuestionRejectedError(\n      \"Derivative status response is not a status view\",\n      response.status,\n      null,\n      { issues: parsed.error.issues },\n    );\n  }\n  return parsed.data;\n}\n\n/**\n * Poll {@link getDerivativeStatus} until the derived scope has an answer or\n * has stopped trying to get one.\n *\n * @remarks\n * Returns as soon as {@link isDerivativeStatusSettled} holds: `ready`, or\n * `failed` with no retry pending. A failure the server will retry is not a\n * result, so the wait continues through it \u2014 on the server's own cadence,\n * because `retryAfterSeconds` is when the next compute actually happens and\n * polling faster only spends requests. A failed status is returned, not\n * thrown: the reader branches on `errorCode`.\n *\n * @returns The settled status.\n * @throws {DerivativeQuestionTimeoutError} When the budget ran out first.\n *   The question keeps computing on the server; call again.\n *\n * @example\n * ```typescript\n * const status = await waitForDerivativeStatus({\n *   personalServerUrl,\n *   derivedScope: \"coach.weekly\",\n *   grantId,\n *   signer,\n *   timeoutMs: 60_000,\n * });\n * if (status.status !== \"ready\") console.log(status.errorCode);\n * ```\n */\nexport async function waitForDerivativeStatus(\n  params: WaitForDerivativeStatusParams,\n): Promise<DerivativeStatus> {\n  const timeoutMs = Math.max(\n    0,\n    params.timeoutMs ?? DEFAULT_DERIVATIVE_STATUS_TIMEOUT_MS,\n  );\n  const pollIntervalMs = Math.max(\n    0,\n    params.pollIntervalMs ?? DEFAULT_DERIVATIVE_STATUS_POLL_INTERVAL_MS,\n  );\n  const deadline = Date.now() + timeoutMs;\n  for (;;) {\n    if (params.signal?.aborted) throw abortError(params.signal);\n    const latest = await getDerivativeStatus(params);\n    if (isDerivativeStatusSettled(latest)) return latest;\n    const remaining = deadline - Date.now();\n    if (remaining <= 0) throw timeoutError(latest, timeoutMs);\n    // The server's scheduled retry decides the cadence outright, in both\n    // directions: a caller's longer pollIntervalMs would sit past a retry\n    // that has already produced an answer, and a shorter one would ask\n    // before anything can have changed. pollIntervalMs is the cadence for\n    // the case where the server named none.\n    const waitMs =\n      latest.retryAfterSeconds === null\n        ? pollIntervalMs\n        : latest.retryAfterSeconds * 1000;\n    if (waitMs > remaining) {\n      // The budget cannot cover the next cadence, so the poll after this\n      // sleep would land before anything could have changed. Give up now\n      // instead of spending a request to say the same thing.\n      throw timeoutError(latest, timeoutMs);\n    }\n    await sleep(waitMs, params.signal);\n  }\n}\n\n/** Statuses that mean a compute is in flight. @see {@link QuestionStatus} */\nexport type PendingDerivativeStatus = Extract<\n  QuestionStatus,\n  \"pending\" | \"stale\"\n>;\n", "import { tryGrantPermissions, type GrantPermission } from \"./scope-actions\";\nimport {\n  DataPointDeletedError,\n  DataPointNotFoundError,\n  DataPointVersionConflictError,\n} from \"../errors\";\nimport {\n  isDataPointTombstone,\n  tombstoneDeletedAt,\n} from \"./data-point-deletion\";\nimport { deriveDataPointId } from \"./lineage\";\nimport {\n  isPlainObject,\n  readJsonObject,\n  readJsonValue,\n} from \"../utils/response-body\";\nimport type { EscrowBalanceResult } from \"./escrow\";\n\nexport type {\n  EscrowBalanceEntry,\n  EscrowBalanceResult,\n  FailedDepositEntry as EscrowDepositFailed,\n  FinalizedDepositEntry as EscrowDepositFinalized,\n  SubmittedDepositEntry as EscrowDepositSubmitted,\n} from \"./escrow\";\n\nexport interface GatewayEnvelope<T> {\n  data: T;\n  proof: GatewayProof;\n  /**\n   * Cursor-based pagination metadata, present on list endpoints (e.g.\n   * `GET /v1/data`). A sibling of `data`, not nested inside it \u2014 so callers\n   * that need it must read the full envelope rather than going through\n   * `unwrapEnvelope`, which intentionally returns only `data`.\n   */\n  pagination?: GatewayPagination;\n}\n\nexport interface GatewayPagination {\n  limit: number;\n  hasMore: boolean;\n  /**\n   * Opaque cursor for the NEXT page; pass back as the `cursor` query param.\n   * Null when there are no further pages.\n   */\n  nextCursor: string | null;\n}\n\nexport interface GatewayProof {\n  signature: string;\n  timestamp: string;\n  gatewayAddress: string;\n  requestHash: string;\n  responseHash: string;\n  userSignature: string;\n  status: string;\n  chainBlockHeight: number;\n}\n\nexport interface Builder {\n  id: string;\n  ownerAddress: string;\n  granteeAddress: string;\n  publicKey: string;\n  appUrl: string;\n  addedAt: string;\n}\n\nexport interface Schema {\n  id: string;\n  ownerAddress: string;\n  name: string;\n  definitionUrl: string;\n  scope: string;\n  addedAt: string;\n}\n\n// Row shape returned by `GET /v1/servers?owner=\u2026`. A discovery-only list \u2014\n// the endpoint carries no per-item gateway attestation (use\n// `getServer(serverAddress)` if you need a verifiable single-server proof).\n// `status` is the gateway's chain-sync state ('pending' | 'confirmed' |\n// 'finalized' | 'reorged'); kept as an open string since the gateway may add\n// states without a SDK bump.\nexport interface OwnerServerRecord {\n  id: string;\n  ownerAddress: string;\n  serverAddress: string;\n  publicKey: string;\n  serverUrl: string;\n  status: string;\n  chainBlockHeight: string | null;\n  // ISO timestamp of the gateway-side upsert.\n  addedAt: string;\n  // ISO timestamp when the grantor deregistered this server. Always null for\n  // entries in the `active` list, always non-null for `revoked`.\n  revokedAt: string | null;\n}\n\n// Response from `GET /v1/servers?owner=\u2026`. Split into two arrays; each is\n// ordered newest-first (`addedAt DESC`, `id ASC` tiebreaker) so `active[0]`\n// is unambiguously the newest active server \u2014 the sensible default when the\n// caller just needs one URL. The gateway caps the total across both arrays\n// at 200 \u2014 per-owner counts are tiny in practice, so no cursor.\nexport interface OwnerServersResult {\n  active: OwnerServerRecord[];\n  revoked: OwnerServerRecord[];\n  count: number;\n}\n\nexport interface ServerInfo {\n  id: string;\n  ownerAddress: string;\n  serverAddress: string;\n  publicKey: string;\n  serverUrl: string;\n  addedAt: string;\n  // ISO timestamp when the grantor deregistered this server, null while\n  // active. The gateway returns this on /v1/servers/:address GETs since\n  // covering revocation in the response keeps the attestation hash\n  // authoritative for both states.\n  revokedAt: string | null;\n}\n\n// Fee annotation surfaced on every GET grant response. Amounts are decimal\n// uint256 strings to match `/v1/escrow/pay`'s wire format. totalDue is a\n// snapshot \u2014 the gateway re-resolves fees at pay time, so clients shouldn't\n// cache this across requests.\nexport interface GatewayGrantFee {\n  asset: string;\n  registrationFee: string;\n  dataAccessFee: string;\n  totalDue: string;\n}\n\n// Lifecycle of a grant's on-chain settlement, tracked separately from the\n// fee-payment lifecycle (paymentStatus). Driven by POST /v1/settle:\n//   pending    \u2014 nothing on-chain yet\n//   submitting \u2014 settle tx broadcast but receipt not yet observed\n//   confirmed  \u2014 settle tx mined successfully\n//   finalized  \u2014 finalized tip past the settle block, reorg-safe\n//   reorged    \u2014 finalized observation reverted; back to 'pending' on next settle\nexport type GatewayGrantStatus =\n  | \"pending\"\n  | \"submitting\"\n  | \"confirmed\"\n  | \"finalized\"\n  | \"reorged\";\n\nexport interface GatewayGrantResponse {\n  id: string;\n  grantorAddress: string;\n  granteeId: string;\n  // The signed scope entries, verbatim (`[operation:]scope`, bare = read).\n  // This is the wire form: it is what the grantor signed and what the\n  // gateway stores. Render `permissions` instead of parsing these.\n  scopes: string[];\n  // Derived by the SDK at read time from `scopes` via grantPermissions():\n  // one `{ scope, actions }` row per scope pattern, canonically ordered.\n  // Never sent to the gateway and never part of the signed payload. Absent\n  // when `scopes` carries an entry this SDK version cannot interpret (an\n  // operation introduced after this release) - fall back to `scopes` and\n  // do not assume such a grant is read-only.\n  permissions?: GrantPermission[];\n  status: GatewayGrantStatus;\n  addedAt: string;\n  // Grantor-signed deadline. null = perpetual grant (signed value was 0).\n  expiresAt: string | null;\n  // Derived at read time from expiresAt vs the gateway's clock \u2014 a snapshot,\n  // not a cached truth. Re-check against expiresAt locally if you care.\n  expired: boolean;\n  revokedAt: string | null;\n  revocationSignature: string | null;\n  // 'pending' until the grant registration fee is settled via /v1/escrow/pay.\n  paymentStatus: \"pending\" | \"paid\";\n  paidAt: string | null;\n  paidBy: string | null;\n  // Decimal-string uint256 monotonic nonce; advances on every state change.\n  grantVersion: string;\n  // Settle metadata \u2014 populated as the grant progresses through the chain\n  // lifecycle. Null while `status === 'pending'`.\n  settleTxHash: string | null;\n  settleSubmittedAt: string | null;\n  // Revocation metadata \u2014 populated independently when the grantor signs\n  // and the gateway pushes a deregister tx.\n  revocationTxHash: string | null;\n  revocationSubmittedAt: string | null;\n  fee: GatewayGrantFee;\n}\n\nexport type GrantListItem = GatewayGrantResponse;\n\n// Mirror of a DataRegistryV2 row as the gateway exposes it. `id` is the\n// deterministic `keccak256(abi.encode(owner, scope))` dataPointId \u2014 the same\n// value the contract uses as its primary key. `expectedVersion` is the latest\n// version the gateway has accepted; the on-chain row may be one version behind\n// while a settle is still pending. The gateway response intentionally drops\n// `status` from the body \u2014 read it from the on-chain contract when you need\n// the canonical lifecycle state.\nexport interface DataPointRecord {\n  id: string;\n  ownerAddress: string;\n  scope: string;\n  dataHash: string;\n  metadataHash: string;\n  // Decimal-string uint256.\n  expectedVersion: string;\n  // ISO 8601 timestamp of the most recent gateway-side upsert.\n  addedAt: string;\n  // ISO 8601 timestamp of the deletion tombstone, null/absent while live.\n  // Only present on reads that opted in via `includeDeleted`; a plain\n  // `getDataPoint` of a deleted row throws `DataPointDeletedError` instead.\n  deletedAt?: string | null;\n}\n\nexport interface GetDataPointOptions {\n  /**\n   * Return the row even after it was deleted (with `deletedAt` set and the\n   * tombstone hash pair) instead of throwing `DataPointDeletedError`.\n   */\n  includeDeleted?: boolean;\n}\n\nexport interface DataPointListResult {\n  dataPoints: DataPointRecord[];\n  cursor: string | null;\n}\n\nexport interface ListDataPointsOptions {\n  /**\n   * Only return rows added at or after this ISO 8601 timestamp. Used by sync\n   * loops that want incremental tails \u2014 pass the last seen `addedAt`.\n   */\n  since?: string;\n  /** Page size. Capped at 1000 by the gateway. */\n  limit?: number;\n  /**\n   * Include deleted (tombstoned) rows, each carrying `deletedAt`. Off by\n   * default; without it the SDK also drops any tombstone the gateway leaks.\n   */\n  includeDeleted?: boolean;\n}\n\n// grantVersion and expiresAt are decimal-string uint256s \u2014 same wire format\n// the gateway expects. The caller is responsible for converting their bigint\n// to a decimal string and for signing GRANT_REGISTRATION_TYPES with matching\n// bigint values.\nexport interface CreateGrantParams {\n  grantorAddress: string;\n  granteeId: string;\n  scopes: string[];\n  grantVersion: string;\n  expiresAt: string;\n  signature: string;\n}\n\nexport interface RevokeGrantParams {\n  grantId: string;\n  grantorAddress: string;\n  grantVersion: string;\n  signature: string;\n}\n\nexport interface RegisterServerParams {\n  ownerAddress: string;\n  serverAddress: string;\n  publicKey: string;\n  serverUrl: string;\n  signature: string;\n}\n\nexport interface RegisterServerResult {\n  serverId?: string;\n  alreadyRegistered: boolean;\n}\n\nexport interface RegisterBuilderParams {\n  ownerAddress: string;\n  // Wallet the builder authenticates to the Personal Server with. The\n  // builderId is deterministically derived from (owner, grantee, publicKey,\n  // appUrl) so this triple pins the on-chain identity.\n  granteeAddress: string;\n  publicKey: string;\n  appUrl: string;\n  signature: string;\n}\n\nexport interface RegisterBuilderResult {\n  builderId?: string;\n  alreadyRegistered: boolean;\n}\n\n// AddData on DataRegistryV2. dataHash + metadataHash are bytes32 commitments\n// to the off-chain payload + its metadata. expectedVersion is a CAS knob \u2014\n// the gateway/contract rejects on 409 if a higher version is already stored,\n// and the error body surfaces `currentExpectedVersion` so callers can re-sign.\nexport interface RegisterDataPointParams {\n  ownerAddress: string;\n  scope: string;\n  dataHash: string;\n  metadataHash: string;\n  expectedVersion: string;\n  signature: string;\n}\n\nexport interface RegisterDataPointResult {\n  dataPointId?: string;\n  expectedVersion?: string;\n}\n\n// Deletion = an owner-signed AddData for version current+1 carrying the\n// tombstone hash pair (see protocol/data-point-deletion.ts). The gateway\n// reconstructs the AddData from the body plus the tombstone constants and\n// recovers the signer, so the hashes are NOT on the wire. Used at\n// DELETE /v1/data/:dataPointId. expectedVersion is the tombstone's version\n// as a decimal uint256 string; the signature is the raw EIP-712 hex.\nexport interface DeleteDataPointParams {\n  ownerAddress: string;\n  scope: string;\n  expectedVersion: string;\n  signature: string;\n}\n\n// The tombstone version record the gateway returns on 200. Fields are\n// optional because, like RegisterDataPointResult, the SDK tolerates either\n// a bare body or an enveloped `{data}`; `deletedAt` is the durable marker.\nexport interface DeleteDataPointResult {\n  dataPointId?: string;\n  ownerAddress?: string;\n  scope?: string;\n  dataHash?: string;\n  metadataHash?: string;\n  expectedVersion?: string;\n  deletedAt?: string | null;\n}\n\n// \u2500\u2500 Escrow / data-access payment path \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// /v1/escrow/pay debits the payer's escrow balance for a payable op. For a\n// Legacy grants use opType='grant' and opId=grantId. Standalone receipt-bound\n// reads use opType='data_access' and opId=accessRecord.recordId. amount and\n// paymentNonce are decimal uint256 strings on the wire. The signature is the\n// raw EIP-712 hex of GENERIC_PAYMENT_TYPES against escrowPaymentDomain.\n\n// A server-signed delivery receipt attached to a data-access payment. The\n// signature is over RECORD_DATA_ACCESS_TYPES against dataRegistryDomain; the\n// signer must be a personal server the data point's owner has registered as\n// trusted. Shape validation in clients does not verify this signature; the\n// gateway verifies it before re-using it on-chain in the next /v1/settle pass\n// via DataRegistryV2.recordDataAccess, where `recordId` dedupes via\n// `_usedRecordIds`.\nexport interface AccessRecord {\n  dataPointId: string;\n  // Decimal-string uint256 \u2014 the data point version being attested to.\n  version: string;\n  // Must equal the enclosing payment's payerAddress (the gateway enforces).\n  accessor: string;\n  recordId: string;\n  signature: string;\n}\n\nexport interface PayForOperationParams {\n  payerAddress: string;\n  opType: string;\n  opId: string;\n  asset: string;\n  amount: string;\n  // Per-payer monotonic; (payer, nonce, kind) must be unique. The gateway\n  // returns 409 if reused \u2014 bump and re-sign.\n  paymentNonce: string;\n  signature: string;\n  // Optional: attach a server-signed access record so the next /v1/settle\n  // pass submits a recordDataAccess tx alongside the payment settlement.\n  // Required for data-access payments (the second-and-onward payments per\n  // grant) that want their on-chain `totalAccesses` counter to advance.\n  accessRecord?: AccessRecord;\n}\n\nexport interface PayForOperationResult {\n  opType: string;\n  opId: string;\n  payerAddress: string;\n  asset: string;\n  amount: string;\n  // Echoes how the gateway split this payment. `registrationPaid` is true on\n  // the first payment for a grant (which bundles both fees) and false on\n  // subsequent data-access-only payments. Off-chain ledger state only \u2014 the\n  // on-chain settlement of the registration is tracked by the grant's\n  // `status` field, not this flag.\n  breakdown: {\n    registrationFee: string;\n    dataAccessFee: string;\n    registrationPaid: boolean;\n  };\n  paymentNonce: string;\n  paidAt: string;\n}\n\n// \u2500\u2500 Settle / reconcile \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n// POST /v1/settle drains pending-on-chain rows (grants, servers, builders,\n// data points, data-point statuses, access records) to the relayer, then\n// promotes 'submitting' \u2192 'confirmed' and 'confirmed' \u2192 'finalized' for\n// previously-submitted rows. One call does all three; the response surfaces\n// each phase's outcomes.\n\n// The op-types the settle endpoint emits in `items[]`. Kept as a union so\n// callers can narrow inside the discriminated SettleItem shape. Mirrors the\n// gateway's drain phases (drainGrants/drainServers/drainBuilders/\n// drainDataPoints/drainDataPointStatuses/drainAccessRecords) \u2014 keep in sync\n// when the gateway adds a drain.\nexport type SettleOpType =\n  | \"grant\"\n  | \"server\"\n  | \"data\"\n  | \"access\"\n  | \"builder\"\n  | \"data-status\";\n\nexport type SettleItem =\n  | {\n      opType: SettleOpType;\n      opId: string;\n      // 'confirmed' when the submit function waited for the receipt and it\n      // mined (registerAndSettle path); 'submitting' when only the tx was\n      // sent (no receipt wait).\n      status: \"submitting\" | \"confirmed\";\n      settleTxHash: string | null;\n      settleSubmittedAt: string | null;\n      // Block height the tx mined in; only set when status === 'confirmed'.\n      chainBlockHeight: string | null;\n      revocationTxHash: string | null;\n      revocationSubmittedAt: string | null;\n      // True while lib/settle.ts is in placeholder mode for this row's pass.\n      placeholder: boolean;\n    }\n  | {\n      opType: SettleOpType;\n      opId: string;\n      status: \"skipped\";\n      reason: string;\n    }\n  | {\n      opType: SettleOpType;\n      opId: string;\n      status: \"failed\";\n      error: string;\n    };\n\n// Outcome of the housekeeping pass that retries earlier `submitting` rows\n// whose receipt arrived after the prior /v1/settle's wait budget elapsed.\nexport interface SettlePromoteResult {\n  opType: SettleOpType;\n  opId: string;\n  status: \"confirmed\" | \"failed\" | \"pending\" | \"skipped\";\n  txHash: string;\n  chainBlockHeight: string | null;\n  reason?: string;\n}\n\n// Outcome of the reconcile pass that advances 'confirmed' \u2192 'finalized' once\n// the chain's finalized tip catches up past the tx's block (or reverts to\n// 'pending' on reorg detection).\nexport interface SettleReconcileItem {\n  opId: string;\n  status: \"finalized\" | \"reorged\" | \"unchanged\";\n  chainBlockHeight: string | null;\n  settleTxHash: string | null;\n  reason?: string;\n}\n\nexport interface SettleParams {\n  // Per-phase cap. Bounded by MAX_LIMIT on the gateway side; omit to use\n  // the gateway's default BATCH_LIMIT.\n  limit?: number;\n}\n\nexport interface SettleResult {\n  scanned: number;\n  submitted: number;\n  confirmed: number;\n  skipped: number;\n  failed: number;\n  items: SettleItem[];\n  promoted: { count: number; items: SettlePromoteResult[] };\n  reconciled: {\n    scanned: number;\n    finalized: number;\n    reorged: number;\n    unchanged: number;\n    items: SettleReconcileItem[];\n  };\n  // Present only when the gateway is configured for paced submission \u2014\n  // spreads work across several blocks within one /v1/settle invocation.\n  paced?: { iterations: number };\n}\n\n/**\n * Legacy `GatewayClient` name for the canonical `/v1/escrow/balance` response.\n * `availableAmount` is `max(balance \u2212 authorizedAmount \u2212 withdrawingAmount, 0)`.\n */\nexport type EscrowBalance = EscrowBalanceResult;\n\n// /v1/escrow/deposit announces an on-chain deposit tx so the gateway can\n// reconcile it into the payer's balance. The gateway extracts the credited\n// account from calldata \u2014 no off-chain claim about who paid.\nexport interface SubmitDepositParams {\n  txHash: string;\n}\n\nexport interface DepositState {\n  txHash: string;\n  account: string;\n  // 'submitted' | 'finalized' | 'failed' \u2014 kept open since the gateway adds\n  // states (e.g. 'orphaned') as the deposit flow evolves.\n  status: string;\n  blockNumber: string | null;\n  submittedAt: string;\n  finalizedAt: string | null;\n  lastError: string | null;\n}\n\nexport interface GatewayClient {\n  isRegisteredBuilder(address: string): Promise<boolean>;\n  getBuilder(address: string): Promise<Builder | null>;\n  getGrant(grantId: string): Promise<GatewayGrantResponse | null>;\n  listGrantsByUser(userAddress: string): Promise<GrantListItem[]>;\n  getSchemaForScope(scope: string): Promise<Schema | null>;\n  getServer(address: string): Promise<ServerInfo | null>;\n  /**\n   * List every personal server an owner has registered \u2014 split into `active`\n   * (currently trusted) and `revoked` (deregistered). Each list is ordered\n   * newest-first; `active[0]` is the sensible default when the caller just\n   * needs one URL for the owner. Empty owner returns `{active: [], revoked: [], count: 0}`.\n   * Discovery-only endpoint \u2014 no per-server attestation; use `getServer` for that.\n   */\n  listServersByOwner(owner: string): Promise<OwnerServersResult>;\n  /**\n   * Fetch a single data point by its deterministic id (keccak256 of (owner, scope)).\n   * Returns null on 404. Throws `DataPointDeletedError` on 410, or when the row is a\n   * tombstone, unless `options.includeDeleted` is set. The gateway omits `status` from\n   * the response body -- read it from the on-chain DataRegistryV2 contract when you need\n   * the canonical lifecycle state.\n   */\n  getDataPoint(\n    dataPointId: string,\n    options?: GetDataPointOptions,\n  ): Promise<DataPointRecord | null>;\n  /**\n   * Page through an owner's data points. Cursor is opaque; pass `null` for the first\n   * page and feed back `result.cursor` until it returns null.\n   * Deleted rows are excluded unless `options.includeDeleted` is set.\n   */\n  listDataPointsByOwner(\n    owner: string,\n    cursor: string | null,\n    options?: ListDataPointsOptions,\n  ): Promise<DataPointListResult>;\n  getSchema(schemaId: string): Promise<Schema | null>;\n  registerServer(params: RegisterServerParams): Promise<RegisterServerResult>;\n  registerBuilder(\n    params: RegisterBuilderParams,\n  ): Promise<RegisterBuilderResult>;\n  registerDataPoint(\n    params: RegisterDataPointParams,\n  ): Promise<RegisterDataPointResult>;\n  /**\n   * Tombstone a data point: `DELETE /v1/data/:dataPointId` with the owner's\n   * AddData signature for version `current + 1`. The dataPointId is derived\n   * from (ownerAddress, scope). Throws `DataPointVersionConflictError` on\n   * 409, `DataPointDeletedError` on 410 (already deleted),\n   * `DataPointNotFoundError` on 404.\n   */\n  deleteDataPoint(\n    params: DeleteDataPointParams,\n  ): Promise<DeleteDataPointResult>;\n  createGrant(params: CreateGrantParams): Promise<{ grantId?: string }>;\n  revokeGrant(params: RevokeGrantParams): Promise<void>;\n  getEscrowBalance(account: string): Promise<EscrowBalanceResult>;\n  submitEscrowDeposit(params: SubmitDepositParams): Promise<DepositState>;\n  payForOperation(\n    params: PayForOperationParams,\n  ): Promise<PayForOperationResult>;\n  settle(params?: SettleParams): Promise<SettleResult>;\n}\n\n// Attach the derived `permissions` view to a grant record read back from the\n// gateway. The wire `scopes` are left untouched.\nfunction withGrantPermissions<T extends GatewayGrantResponse>(grant: T): T {\n  // Gateway responses are untrusted runtime data despite their type. The\n  // `permissions` view is SDK-owned: drop whatever the body carried under\n  // that name, then derive only from a well-formed string[] and leave the\n  // field absent otherwise, so a spoofed or stale value can never be\n  // rendered as this grant's authority.\n  const stripped = { ...grant };\n  delete stripped.permissions;\n  const scopes: unknown = stripped.scopes;\n  if (!Array.isArray(scopes)) {\n    return stripped;\n  }\n  const permissions = tryGrantPermissions(scopes as string[]);\n  return permissions === undefined ? stripped : { ...stripped, permissions };\n}\n\nexport function createGatewayClient(baseUrl: string): GatewayClient {\n  const base = baseUrl.replace(/\\/+$/, \"\");\n\n  function malformedBody(res: Response): Error {\n    return new Error(\n      `Gateway error: ${res.status} malformed response body (expected a JSON envelope)`,\n    );\n  }\n\n  // GET responses are `{ data, proof, pagination? }`. A 200 whose body is\n  // empty, not JSON, or not an object with `data` is a gateway bug, not a\n  // record: fail with a clear error instead of returning undefined.\n  async function readEnvelope<T>(\n    res: Response,\n  ): Promise<Record<string, unknown> & { data: T }> {\n    const envelope = await readJsonValue(res);\n    if (!isPlainObject(envelope) || !(\"data\" in envelope)) {\n      throw malformedBody(res);\n    }\n    return envelope as Record<string, unknown> & { data: T };\n  }\n\n  async function unwrapEnvelope<T>(res: Response): Promise<T> {\n    return (await readEnvelope<T>(res)).data;\n  }\n\n  function getMutationId(body: unknown, key: string): string | undefined {\n    if (!isPlainObject(body)) return undefined;\n    const value = body[key] ?? body[\"id\"];\n    return typeof value === \"string\" ? value : undefined;\n  }\n\n  // Mutation responses are bare JSON; GET responses are enveloped. Accept\n  // either so a gateway that wraps the tombstone record still round-trips.\n  // Any body that is not a plain object (empty 204, `null`, an array, an\n  // HTML error page) reads as `{}` so the status-code mapping still wins.\n  async function readBody(res: Response): Promise<Record<string, unknown>> {\n    const raw = await readJsonObject(res);\n    const data = raw[\"data\"];\n    if (isPlainObject(data) && \"proof\" in raw) {\n      return data;\n    }\n    return raw;\n  }\n\n  function stringOrUndefined(value: unknown): string | undefined {\n    return typeof value === \"string\" ? value : undefined;\n  }\n\n  async function deletedError(\n    res: Response,\n    details: { dataPointId?: string; scope?: string; ownerAddress?: string },\n  ): Promise<DataPointDeletedError> {\n    const body = await readBody(res);\n    return new DataPointDeletedError(\n      `Data point ${details.dataPointId ?? details.scope ?? \"\"} has been deleted`,\n      { ...details, deletedAt: tombstoneDeletedAt(body) },\n    );\n  }\n\n  return {\n    async isRegisteredBuilder(address: string): Promise<boolean> {\n      const builder = await this.getBuilder(address);\n      return builder !== null;\n    },\n\n    async getBuilder(address: string): Promise<Builder | null> {\n      const res = await fetch(`${base}/v1/builders/${address}`);\n      if (res.status === 404) return null;\n      if (!res.ok) {\n        throw new Error(`Gateway error: ${res.status} ${res.statusText}`);\n      }\n      return unwrapEnvelope<Builder>(res);\n    },\n\n    async getGrant(grantId: string): Promise<GatewayGrantResponse | null> {\n      const res = await fetch(`${base}/v1/grants/${grantId}`);\n      if (res.status === 404) return null;\n      if (!res.ok) {\n        throw new Error(`Gateway error: ${res.status} ${res.statusText}`);\n      }\n      return withGrantPermissions(\n        await unwrapEnvelope<GatewayGrantResponse>(res),\n      );\n    },\n\n    async listGrantsByUser(userAddress: string): Promise<GrantListItem[]> {\n      const res = await fetch(`${base}/v1/grants?user=${userAddress}`);\n      if (res.status === 404) return [];\n      if (!res.ok) {\n        throw new Error(`Gateway error: ${res.status} ${res.statusText}`);\n      }\n      const grants = await unwrapEnvelope<GrantListItem[]>(res);\n      return grants.map(withGrantPermissions);\n    },\n\n    async getSchemaForScope(scope: string): Promise<Schema | null> {\n      const res = await fetch(`${base}/v1/schemas?scope=${scope}`);\n      if (res.status === 404) return null;\n      if (!res.ok) {\n        throw new Error(`Gateway error: ${res.status} ${res.statusText}`);\n      }\n      return unwrapEnvelope<Schema>(res);\n    },\n\n    async getServer(address: string): Promise<ServerInfo | null> {\n      const res = await fetch(`${base}/v1/servers/${address}`);\n      if (res.status === 404) return null;\n      if (!res.ok) {\n        throw new Error(`Gateway error: ${res.status} ${res.statusText}`);\n      }\n      return unwrapEnvelope<ServerInfo>(res);\n    },\n\n    async listServersByOwner(owner: string): Promise<OwnerServersResult> {\n      // URLSearchParams encodes the owner so a malformed value (e.g.\n      // \"0xabc&foo=bar\") can't inject extra query params. Same pattern as\n      // listDataPointsByOwner.\n      const params = new URLSearchParams({ owner });\n      const res = await fetch(`${base}/v1/servers?${params.toString()}`);\n      if (!res.ok) {\n        throw new Error(`Gateway error: ${res.status} ${res.statusText}`);\n      }\n      // Unlike /v1/servers/:address, the list endpoint returns the body\n      // directly \u2014 no GatewayEnvelope, no attestation (discovery-only).\n      return (await res.json()) as OwnerServersResult;\n    },\n\n    async getDataPoint(\n      dataPointId: string,\n      options?: GetDataPointOptions,\n    ): Promise<DataPointRecord | null> {\n      const query = options?.includeDeleted ? \"?includeDeleted=true\" : \"\";\n      const res = await fetch(`${base}/v1/data/${dataPointId}${query}`);\n      if (res.status === 404) return null;\n      if (res.status === 410) {\n        throw await deletedError(res, { dataPointId });\n      }\n      if (!res.ok) {\n        throw new Error(`Gateway error: ${res.status} ${res.statusText}`);\n      }\n      const record = await unwrapEnvelope<DataPointRecord>(res);\n      // Never hand a tombstone back as data unless the caller opted in --\n      // guards against a gateway that returns 200 + deletedAt on plain reads.\n      if (!options?.includeDeleted && isDataPointTombstone(record)) {\n        throw new DataPointDeletedError(\n          `Data point ${dataPointId} has been deleted`,\n          {\n            dataPointId,\n            scope: record.scope,\n            ownerAddress: record.ownerAddress,\n            deletedAt: tombstoneDeletedAt(record),\n          },\n        );\n      }\n      return record;\n    },\n\n    async listDataPointsByOwner(\n      owner: string,\n      cursor: string | null,\n      options?: ListDataPointsOptions,\n    ): Promise<DataPointListResult> {\n      const params = new URLSearchParams({ user: owner });\n      if (cursor !== null) {\n        params.set(\"cursor\", cursor);\n      }\n      if (options?.since) {\n        params.set(\"since\", options.since);\n      }\n      if (options?.limit !== undefined) {\n        params.set(\"limit\", String(options.limit));\n      }\n      if (options?.includeDeleted) {\n        params.set(\"includeDeleted\", \"true\");\n      }\n      const res = await fetch(`${base}/v1/data?${params.toString()}`);\n      if (!res.ok) {\n        throw new Error(`Gateway error: ${res.status} ${res.statusText}`);\n      }\n      // Next-page cursor lives in the envelope's `pagination.nextCursor`\n      // (a sibling of `data`), so read the full envelope rather than going\n      // through `unwrapEnvelope`, which returns only `data`.\n      const envelope = await readEnvelope<unknown>(res);\n      if (\n        !isPlainObject(envelope.data) ||\n        !Array.isArray(envelope.data[\"dataPoints\"])\n      ) {\n        throw malformedBody(res);\n      }\n      const rows = envelope.data[\"dataPoints\"] as DataPointRecord[];\n      const pagination = isPlainObject(envelope[\"pagination\"])\n        ? envelope[\"pagination\"]\n        : undefined;\n      const rawCursor = pagination?.[\"nextCursor\"];\n      const nextCursor =\n        pagination?.[\"hasMore\"] === false || typeof rawCursor !== \"string\"\n          ? null\n          : rawCursor;\n      // Tombstones only surface when asked for; drop any the gateway leaks\n      // on a plain list so sync loops never ingest one as data.\n      const dataPoints = options?.includeDeleted\n        ? rows\n        : rows.filter((row) => !isDataPointTombstone(row));\n      return {\n        dataPoints,\n        cursor: nextCursor,\n      };\n    },\n\n    async getSchema(schemaId: string): Promise<Schema | null> {\n      const res = await fetch(`${base}/v1/schemas/${schemaId}`);\n      if (res.status === 404) return null;\n      if (!res.ok) {\n        throw new Error(`Gateway error: ${res.status} ${res.statusText}`);\n      }\n      return unwrapEnvelope<Schema>(res);\n    },\n\n    async registerServer(\n      params: RegisterServerParams,\n    ): Promise<RegisterServerResult> {\n      const res = await fetch(`${base}/v1/servers`, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          Authorization: `Web3Signed ${params.signature}`,\n        },\n        body: JSON.stringify({\n          ownerAddress: params.ownerAddress,\n          serverAddress: params.serverAddress,\n          publicKey: params.publicKey,\n          serverUrl: params.serverUrl,\n        }),\n      });\n      if (res.status === 409) {\n        const body = await readJsonObject(res);\n        return {\n          serverId: getMutationId(body, \"serverId\"),\n          alreadyRegistered: true,\n        };\n      }\n      if (!res.ok) {\n        throw new Error(`Gateway error: ${res.status} ${res.statusText}`);\n      }\n      const body = await readJsonObject(res);\n      return {\n        serverId: getMutationId(body, \"serverId\"),\n        alreadyRegistered: false,\n      };\n    },\n\n    async registerBuilder(\n      params: RegisterBuilderParams,\n    ): Promise<RegisterBuilderResult> {\n      const res = await fetch(`${base}/v1/builders`, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          Authorization: `Web3Signed ${params.signature}`,\n        },\n        body: JSON.stringify({\n          ownerAddress: params.ownerAddress,\n          granteeAddress: params.granteeAddress,\n          publicKey: params.publicKey,\n          appUrl: params.appUrl,\n        }),\n      });\n      // 409 is idempotent \u2014 the gateway's current 409 body doesn't include\n      // the builderId, but we tolerate it in case that changes (mirrors the\n      // registerServer / createGrant shape).\n      if (res.status === 409) {\n        const body = await readJsonObject(res);\n        return {\n          builderId: getMutationId(body, \"builderId\"),\n          alreadyRegistered: true,\n        };\n      }\n      if (!res.ok) {\n        throw new Error(`Gateway error: ${res.status} ${res.statusText}`);\n      }\n      const body = await readJsonObject(res);\n      return {\n        builderId: getMutationId(body, \"builderId\"),\n        alreadyRegistered: false,\n      };\n    },\n\n    async registerDataPoint(\n      params: RegisterDataPointParams,\n    ): Promise<RegisterDataPointResult> {\n      const res = await fetch(`${base}/v1/data`, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          Authorization: `Web3Signed ${params.signature}`,\n        },\n        body: JSON.stringify({\n          ownerAddress: params.ownerAddress,\n          scope: params.scope,\n          dataHash: params.dataHash,\n          metadataHash: params.metadataHash,\n          expectedVersion: params.expectedVersion,\n        }),\n      });\n      // 409 is a real failure here (stale CAS), not an idempotent replay \u2014\n      // surface the gateway's error message verbatim so the caller knows\n      // what `currentExpectedVersion` to re-sign against.\n      if (!res.ok) {\n        const body = await readJsonObject(res);\n        const detail = stringOrUndefined(body[\"error\"]) ?? res.statusText;\n        throw new Error(`Gateway error: ${res.status} ${detail}`);\n      }\n      const body = await readJsonObject(res);\n      return {\n        dataPointId: getMutationId(body, \"dataPointId\"),\n        expectedVersion: stringOrUndefined(body[\"expectedVersion\"]),\n      };\n    },\n\n    async deleteDataPoint(\n      params: DeleteDataPointParams,\n    ): Promise<DeleteDataPointResult> {\n      // The gateway keys the row on keccak256(abi.encode(owner, scope)) --\n      // derive it locally rather than asking the caller for it, so the path\n      // can never disagree with the signed (owner, scope).\n      const dataPointId = deriveDataPointId(\n        params.ownerAddress as `0x${string}`,\n        params.scope,\n      );\n      const details = {\n        dataPointId,\n        scope: params.scope,\n        ownerAddress: params.ownerAddress,\n      };\n      // Signature rides both in the body (the DELETE contract) and as the\n      // Web3Signed Authorization header every other /v1 mutation uses.\n      const res = await fetch(`${base}/v1/data/${dataPointId}`, {\n        method: \"DELETE\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          Authorization: `Web3Signed ${params.signature}`,\n        },\n        body: JSON.stringify({\n          ownerAddress: params.ownerAddress,\n          scope: params.scope,\n          expectedVersion: params.expectedVersion,\n          signature: params.signature,\n        }),\n      });\n      if (res.status === 404) {\n        throw new DataPointNotFoundError(\n          `Data point ${dataPointId} (scope '${params.scope}') is not registered`,\n          details,\n        );\n      }\n      if (res.status === 409) {\n        const body = await readBody(res);\n        const currentExpectedVersion = stringOrUndefined(\n          body[\"currentExpectedVersion\"],\n        );\n        const detail = stringOrUndefined(body[\"error\"]) ?? res.statusText;\n        throw new DataPointVersionConflictError(\n          `Gateway error: 409 ${detail}`,\n          {\n            ...details,\n            expectedVersion: params.expectedVersion,\n            currentExpectedVersion,\n          },\n        );\n      }\n      if (res.status === 410) {\n        throw await deletedError(res, details);\n      }\n      if (!res.ok) {\n        // 400 = the recovered signer/hashes do not match the tombstone\n        // AddData. Surface the gateway's message verbatim, like\n        // registerDataPoint does.\n        const body = await readBody(res);\n        const detail = stringOrUndefined(body[\"error\"]) ?? res.statusText;\n        throw new Error(`Gateway error: ${res.status} ${detail}`);\n      }\n      const body = await readBody(res);\n      return {\n        dataPointId: getMutationId(body, \"dataPointId\") ?? dataPointId,\n        ownerAddress: stringOrUndefined(body[\"ownerAddress\"]),\n        scope: stringOrUndefined(body[\"scope\"]),\n        dataHash: stringOrUndefined(body[\"dataHash\"]),\n        metadataHash: stringOrUndefined(body[\"metadataHash\"]),\n        expectedVersion: stringOrUndefined(body[\"expectedVersion\"]),\n        deletedAt: tombstoneDeletedAt(body),\n      };\n    },\n\n    async createGrant(\n      params: CreateGrantParams,\n    ): Promise<{ grantId?: string }> {\n      const res = await fetch(`${base}/v1/grants`, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          Authorization: `Web3Signed ${params.signature}`,\n        },\n        body: JSON.stringify({\n          grantorAddress: params.grantorAddress,\n          granteeId: params.granteeId,\n          scopes: params.scopes,\n          grantVersion: params.grantVersion,\n          expiresAt: params.expiresAt,\n        }),\n      });\n      if (res.status === 409) {\n        const body = await readJsonObject(res);\n        return { grantId: getMutationId(body, \"grantId\") };\n      }\n      if (!res.ok) {\n        throw new Error(`Gateway error: ${res.status} ${res.statusText}`);\n      }\n      const body = await readJsonObject(res);\n      return { grantId: getMutationId(body, \"grantId\") };\n    },\n\n    async revokeGrant(params: RevokeGrantParams): Promise<void> {\n      const res = await fetch(`${base}/v1/grants/${params.grantId}`, {\n        method: \"DELETE\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          Authorization: `Web3Signed ${params.signature}`,\n        },\n        body: JSON.stringify({\n          grantorAddress: params.grantorAddress,\n          grantVersion: params.grantVersion,\n        }),\n      });\n      if (res.status === 409) return;\n      if (!res.ok) {\n        throw new Error(`Gateway error: ${res.status} ${res.statusText}`);\n      }\n    },\n\n    async getEscrowBalance(account: string): Promise<EscrowBalanceResult> {\n      const res = await fetch(`${base}/v1/escrow/balance?account=${account}`);\n      if (!res.ok) {\n        throw new Error(`Gateway error: ${res.status} ${res.statusText}`);\n      }\n      // Unlike the rest of /v1, the balance endpoint returns the body\n      // directly (no GatewayEnvelope wrap) \u2014 it's a pure read with no\n      // gateway-signed attestation. See data-gateway api/v1/escrow/balance.ts.\n      return (await res.json()) as EscrowBalanceResult;\n    },\n\n    async submitEscrowDeposit(\n      params: SubmitDepositParams,\n    ): Promise<DepositState> {\n      const res = await fetch(`${base}/v1/escrow/deposit`, {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\" },\n        body: JSON.stringify({ txHash: params.txHash }),\n      });\n      // The gateway returns 202 for \"accepted (still confirming)\" and 200 for\n      // duplicate idempotent replays. Both carry the deposit's current state.\n      if (res.status !== 200 && res.status !== 202) {\n        throw new Error(`Gateway error: ${res.status} ${res.statusText}`);\n      }\n      return (await res.json()) as DepositState;\n    },\n\n    async payForOperation(\n      params: PayForOperationParams,\n    ): Promise<PayForOperationResult> {\n      // Build the body without the accessRecord key when absent so the\n      // gateway's \"missing optional\" branch matches the no-receipt case\n      // exactly (an explicit `accessRecord: undefined` would JSON-serialize\n      // to nothing \u2014 same result \u2014 but keeping it conditional makes wire\n      // traces easier to read).\n      const body: Record<string, unknown> = {\n        payerAddress: params.payerAddress,\n        opType: params.opType,\n        opId: params.opId,\n        asset: params.asset,\n        amount: params.amount,\n        paymentNonce: params.paymentNonce,\n      };\n      if (params.accessRecord) {\n        body[\"accessRecord\"] = params.accessRecord;\n      }\n      const res = await fetch(`${base}/v1/escrow/pay`, {\n        method: \"POST\",\n        headers: {\n          \"Content-Type\": \"application/json\",\n          Authorization: `Web3Signed ${params.signature}`,\n        },\n        body: JSON.stringify(body),\n      });\n      if (!res.ok) {\n        throw new Error(`Gateway error: ${res.status} ${res.statusText}`);\n      }\n      return (await res.json()) as PayForOperationResult;\n    },\n\n    async settle(params?: SettleParams): Promise<SettleResult> {\n      const res = await fetch(`${base}/v1/settle`, {\n        method: \"POST\",\n        headers: { \"Content-Type\": \"application/json\" },\n        // The gateway accepts an empty body; only `limit` is recognised.\n        // Always send a JSON body so the gateway's req.body shape parse\n        // doesn't have to deal with an undefined.\n        body: JSON.stringify(params ?? {}),\n      });\n      if (!res.ok) {\n        throw new Error(`Gateway error: ${res.status} ${res.statusText}`);\n      }\n      return (await res.json()) as SettleResult;\n    },\n  };\n}\n", "/**\n * Escrow-backed payment authorization for the Direct Data Controller.\n *\n * @remarks\n * Builds on the DPv2 escrow surface added in `protocol/escrow`. When a Personal\n * Server read returns `402 Payment Required`, the controller settles the\n * challenged operation through the escrow gateway:\n *\n *  1. Sign the challenge's `GenericPayment` EIP-712 message with the app key.\n *  2. POST it to the gateway's `/v1/escrow/pay` via {@link EscrowGatewayClient}.\n *  3. Map the gateway's {@link EscrowPayResult} into a typed\n *     {@link DirectPaymentReceipt} for the caller to inspect.\n *\n * This module supports legacy `\"grant\"` operations and receipt-bound\n * `\"data_access\"` operations. It adapts the escrow `payForOp` flow to the\n * direct-read use case; it does not define its own payment scheme.\n *\n * @category Direct\n * @module direct/escrow-payment\n */\n\nimport {\n  GENERIC_PAYMENT_TYPES,\n  NATIVE_ASSET_ADDRESS,\n  genericPaymentDomain,\n  type EscrowAccessRecord,\n  type EscrowPaymentClient,\n  type EscrowPayResult,\n  type PaymentBreakdown,\n} from \"../protocol/escrow\";\nimport type {\n  DirectFeeBreakdown,\n  DirectPaymentReceipt,\n  DirectPaymentResponseMetadata,\n  PersonalServerPaymentOperation,\n  PersonalServerPaymentRequired,\n} from \"./types\";\n\n/** The escrow `GenericPayment.opType` used for grant-lifecycle payments. */\nexport const GRANT_OP_TYPE = \"grant\" as const;\n/** The escrow `GenericPayment.opType` used for receipt-bound data access. */\nexport const DATA_ACCESS_OP_TYPE = \"data_access\" as const;\n\n/**\n * EIP-712 typed-data signer (e.g. viem `account.signTypedData`).\n *\n * @remarks\n * Kept structurally minimal so any viem account/wallet client satisfies it\n * without the SDK depending on viem's exact `signTypedData` overload set.\n */\nexport type SignTypedDataFn = (args: {\n  domain: ReturnType<typeof genericPaymentDomain>;\n  types: typeof GENERIC_PAYMENT_TYPES;\n  primaryType: \"GenericPayment\";\n  message: {\n    payerAddress: `0x${string}`;\n    opType: string;\n    opId: `0x${string}`;\n    asset: `0x${string}`;\n    amount: bigint;\n    paymentNonce: bigint;\n  };\n}) => Promise<`0x${string}`>;\n\n/** Supplies a monotonically-increasing payment nonce per payer. */\nexport type PaymentNonceSource = (\n  payerAddress: string,\n) => Promise<bigint> | bigint;\n\ninterface EscrowPaymentMessage {\n  payerAddress: `0x${string}`;\n  opType: typeof GRANT_OP_TYPE | typeof DATA_ACCESS_OP_TYPE;\n  opId: `0x${string}`;\n  asset: `0x${string}`;\n  amount: string;\n  paymentNonce: string;\n}\n\ninterface SignedEscrowPayment {\n  message: EscrowPaymentMessage;\n  signature: `0x${string}`;\n  accessRecord?: EscrowAccessRecord;\n}\n\ninterface X402PaymentHeader {\n  x402Version: 1;\n  scheme: \"vana-escrow-grant\";\n  network: string;\n  payload: SignedEscrowPayment;\n}\n\n/** Configuration required to sign an escrow X-PAYMENT header. */\nexport interface EscrowPaymentHeaderConfig {\n  /** Deployed `DataPortabilityEscrow` contract address. */\n  escrowContract: `0x${string}`;\n  /** Chain id for the EIP-712 domain (1480 mainnet, 14800 moksha). */\n  chainId: number;\n  /** App EIP-712 signer. */\n  signTypedData: SignTypedDataFn;\n  /**\n   * Supplies the next payment nonce for a payer. Defaults to a process-local\n   * monotonic counter seeded at 1. Provide a durable source in production so\n   * nonces survive restarts (the gateway rejects reused (payer, nonce) pairs).\n   */\n  nonceSource?: PaymentNonceSource;\n}\n\n/**\n * Escrow settlement configuration for gateway authorization.\n *\n * @remarks\n * Extends the header-signing boundary with the gateway client used by\n * {@link authorizeEscrowPayment}. Existing controller and legacy wrapper\n * callers can continue to provide this full configuration.\n */\nexport interface EscrowPaymentConfig extends EscrowPaymentHeaderConfig {\n  /** Client for the gateway escrow endpoints (`/v1/escrow/*`). */\n  client: EscrowPaymentClient;\n}\n\n/** Map the gateway {@link PaymentBreakdown} into the public {@link DirectFeeBreakdown}. */\nexport function toDirectFeeBreakdown(\n  breakdown: PaymentBreakdown,\n): DirectFeeBreakdown {\n  return {\n    registrationFee: breakdown.registrationFee,\n    dataAccessFee: breakdown.dataAccessFee,\n    registrationPaid: breakdown.registrationPaid,\n  };\n}\n\n/** Map a gateway {@link EscrowPayResult} into the public {@link DirectPaymentReceipt}. */\nexport function toDirectPaymentReceipt(\n  result: EscrowPayResult,\n): DirectPaymentReceipt {\n  return {\n    opType: result.opType,\n    opId: result.opId,\n    asset: result.asset,\n    amount: result.amount,\n    paymentNonce: result.paymentNonce,\n    breakdown: toDirectFeeBreakdown(result.breakdown),\n    paidAt: result.paidAt,\n  };\n}\n\n/** Default in-process monotonic nonce counter (seeded at 1 per payer). */\nexport function createDefaultNonceSource(): PaymentNonceSource {\n  const counters = new Map<string, bigint>();\n  return (payerAddress: string): bigint => {\n    const key = payerAddress.toLowerCase();\n    const next = (counters.get(key) ?? 0n) + 1n;\n    counters.set(key, next);\n    return next;\n  };\n}\n\nconst processLocalNonceSource = createDefaultNonceSource();\nconst UINT256_MAX = (1n << 256n) - 1n;\nconst ADDRESS_RE = /^0x[0-9a-fA-F]{40}$/;\nconst BYTES32_RE = /^0x[0-9a-fA-F]{64}$/;\nconst SIGNATURE_RE = /^0x[0-9a-fA-F]{130}$/;\n\nfunction isUint256Decimal(value: string, allowZero: boolean): boolean {\n  const pattern = allowZero ? /^(0|[1-9]\\d*)$/ : /^[1-9]\\d*$/;\n  return (\n    value.length <= UINT256_MAX.toString().length &&\n    pattern.test(value) &&\n    BigInt(value) <= UINT256_MAX\n  );\n}\n\nfunction isValidAccessRecord(record: EscrowAccessRecord): boolean {\n  return (\n    BYTES32_RE.test(record.dataPointId) &&\n    isUint256Decimal(record.version, false) &&\n    ADDRESS_RE.test(record.accessor) &&\n    BYTES32_RE.test(record.recordId) &&\n    SIGNATURE_RE.test(record.signature)\n  );\n}\n\nfunction validateSigningOperation(\n  payerAddress: `0x${string}`,\n  required: PersonalServerPaymentOperation,\n): void {\n  if (!ADDRESS_RE.test(payerAddress)) {\n    throw new Error(\"Payment payer must be a 20-byte EVM address\");\n  }\n  if (!BYTES32_RE.test(required.opId)) {\n    throw new Error(\"Payment operation id must be a 32-byte hex value\");\n  }\n  if (!ADDRESS_RE.test(required.asset || NATIVE_ASSET_ADDRESS)) {\n    throw new Error(\"Payment asset must be a 20-byte EVM address\");\n  }\n  if (!isUint256Decimal(required.amount, true)) {\n    throw new Error(\"Payment amount must be a canonical uint256 decimal\");\n  }\n  if (\n    required.paymentNonce !== undefined &&\n    !isUint256Decimal(required.paymentNonce, false)\n  ) {\n    throw new Error(\"Payment nonce must be a positive uint256 decimal\");\n  }\n\n  const accessRecord = required.accessRecord;\n  if (required.opType === DATA_ACCESS_OP_TYPE) {\n    if (!accessRecord || !isValidAccessRecord(accessRecord)) {\n      throw new Error(\"Data-access payment requires a valid access record\");\n    }\n    if (required.opId.toLowerCase() !== accessRecord.recordId.toLowerCase()) {\n      throw new Error(\n        \"Data-access payment operation id must equal the access record id\",\n      );\n    }\n    if (accessRecord.accessor.toLowerCase() !== payerAddress.toLowerCase()) {\n      throw new Error(\n        \"Data-access payment accessor must equal the payment payer address\",\n      );\n    }\n    return;\n  }\n\n  if (required.amount === \"0\") {\n    if (\n      !accessRecord ||\n      !isValidAccessRecord(accessRecord) ||\n      accessRecord.accessor.toLowerCase() !== payerAddress.toLowerCase()\n    ) {\n      throw new Error(\n        \"Zero-amount grant payments require a valid access record for the payer\",\n      );\n    }\n  }\n}\n\nfunction base64EncodeJson(value: unknown): string {\n  const bytes = new TextEncoder().encode(JSON.stringify(value));\n  let binary = \"\";\n  for (const byte of bytes) binary += String.fromCharCode(byte);\n  return btoa(binary);\n}\n\nfunction base64DecodeJson(value: string): unknown {\n  const binary = atob(value);\n  const bytes = Uint8Array.from(binary, (char) => char.charCodeAt(0));\n  return JSON.parse(new TextDecoder().decode(bytes));\n}\n\nasync function signEscrowPayment(params: {\n  payerAddress: `0x${string}`;\n  required: PersonalServerPaymentOperation;\n  config: EscrowPaymentHeaderConfig;\n}): Promise<SignedEscrowPayment> {\n  const { payerAddress, required, config } = params;\n  validateSigningOperation(payerAddress, required);\n  const nonceSource = config.nonceSource ?? processLocalNonceSource;\n  const paymentNonce = BigInt(\n    required.paymentNonce ?? (await nonceSource(payerAddress)),\n  );\n  const asset = (required.asset || NATIVE_ASSET_ADDRESS) as `0x${string}`;\n  const opId = required.opId as `0x${string}`;\n  const amount = BigInt(required.amount);\n  if (amount < 0n || amount > UINT256_MAX) {\n    throw new Error(\"Payment amount must be a uint256\");\n  }\n  if (paymentNonce <= 0n || paymentNonce > UINT256_MAX) {\n    throw new Error(\"Payment nonce must be a positive uint256\");\n  }\n\n  const message = {\n    payerAddress,\n    opType: required.opType,\n    opId,\n    asset,\n    amount,\n    paymentNonce,\n  };\n\n  const signature = await config.signTypedData({\n    domain: genericPaymentDomain(config.chainId, config.escrowContract),\n    types: GENERIC_PAYMENT_TYPES,\n    primaryType: \"GenericPayment\",\n    message,\n  });\n\n  return {\n    message: {\n      ...message,\n      amount: amount.toString(),\n      paymentNonce: paymentNonce.toString(),\n    },\n    signature,\n    ...(required.accessRecord ? { accessRecord: required.accessRecord } : {}),\n  };\n}\n\n/**\n * Build the canonical X-PAYMENT header for a validated escrow operation.\n *\n * @remarks\n * Supports both legacy grant payments and receipt-bound data-access payments.\n * Signing is injected through {@link EscrowPaymentHeaderConfig.signTypedData}.\n */\nexport async function buildEscrowPaymentHeader(params: {\n  /** Address whose escrow balance pays for the operation. */\n  payerAddress: `0x${string}`;\n  /** Validated operation parsed from the Personal Server challenge. */\n  required: PersonalServerPaymentOperation;\n  /** Escrow contract, chain, signer, and nonce configuration. */\n  config: EscrowPaymentHeaderConfig;\n}): Promise<string> {\n  const network = params.required.network ?? `vana:${params.config.chainId}`;\n  if (network !== `vana:${params.config.chainId}`) {\n    throw new Error(\"Payment network must match the configured chain\");\n  }\n\n  const signed = await signEscrowPayment(params);\n  const payment: X402PaymentHeader = {\n    x402Version: 1,\n    scheme: \"vana-escrow-grant\",\n    network,\n    payload: signed,\n  };\n  return base64EncodeJson(payment);\n}\n\n/** Build a legacy grant X-PAYMENT header. */\nexport async function buildGrantPaymentHeader(params: {\n  payerAddress: `0x${string}`;\n  required: PersonalServerPaymentRequired;\n  config: EscrowPaymentConfig;\n}): Promise<string> {\n  return buildEscrowPaymentHeader({\n    ...params,\n    required: {\n      ...params.required,\n      opType: GRANT_OP_TYPE,\n      opId: params.required.grantId,\n    },\n  });\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n  return value && typeof value === \"object\" && !Array.isArray(value)\n    ? (value as Record<string, unknown>)\n    : undefined;\n}\n\nfunction stringField(\n  value: Record<string, unknown> | undefined,\n  key: string,\n): string | undefined {\n  const field = value?.[key];\n  return typeof field === \"string\" ? field : undefined;\n}\n\nfunction isCanonicalIsoTimestamp(value: string): boolean {\n  try {\n    return new Date(value).toISOString() === value;\n  } catch {\n    return false;\n  }\n}\n\n/**\n * Parse shape-validated payment response metadata echoed by a Personal Server.\n *\n * @remarks\n * This metadata is not authenticated by the gateway. It is suitable for\n * display and debugging, not as proof that a payment occurred.\n */\nexport function paymentResponseMetadataFromHeader(\n  header: string | null | undefined,\n): DirectPaymentResponseMetadata | undefined {\n  if (!header) return undefined;\n  try {\n    const result = asRecord(base64DecodeJson(header));\n    const breakdown = asRecord(result?.breakdown);\n    const opType = stringField(result, \"opType\");\n    const opId = stringField(result, \"opId\");\n    const payerAddress = stringField(result, \"payerAddress\");\n    const asset = stringField(result, \"asset\");\n    const amount = stringField(result, \"amount\");\n    const paymentNonce = stringField(result, \"paymentNonce\");\n    const registrationFee = stringField(breakdown, \"registrationFee\");\n    const dataAccessFee = stringField(breakdown, \"dataAccessFee\");\n    const paidAt = stringField(result, \"paidAt\");\n    if (\n      result?.success !== true ||\n      !opType ||\n      !opId ||\n      !BYTES32_RE.test(opId) ||\n      !payerAddress ||\n      !ADDRESS_RE.test(payerAddress) ||\n      !asset ||\n      !ADDRESS_RE.test(asset) ||\n      !amount ||\n      !isUint256Decimal(amount, true) ||\n      !paymentNonce ||\n      !isUint256Decimal(paymentNonce, false) ||\n      !registrationFee ||\n      !isUint256Decimal(registrationFee, true) ||\n      !dataAccessFee ||\n      !isUint256Decimal(dataAccessFee, true) ||\n      typeof breakdown?.registrationPaid !== \"boolean\" ||\n      !paidAt ||\n      !isCanonicalIsoTimestamp(paidAt)\n    ) {\n      return undefined;\n    }\n    return {\n      opType,\n      opId,\n      asset,\n      amount,\n      paymentNonce,\n      breakdown: {\n        registrationFee,\n        dataAccessFee,\n        registrationPaid: breakdown.registrationPaid,\n      },\n      paidAt,\n    };\n  } catch {\n    return undefined;\n  }\n}\n\n/**\n * @deprecated Use {@link paymentResponseMetadataFromHeader}. A Personal\n * Server response header is untrusted metadata, not a gateway-authenticated\n * receipt.\n */\nexport function paymentReceiptFromHeader(\n  header: string | null | undefined,\n): DirectPaymentResponseMetadata | undefined {\n  return paymentResponseMetadataFromHeader(header);\n}\n\n/**\n * Authorize an escrow payment for a grant data-access fee.\n *\n * @param params - The payment requirement, the payer address, and escrow config.\n * @returns The gateway's {@link EscrowPayResult} as a typed\n * {@link DirectPaymentReceipt}.\n */\nexport async function authorizeGrantPayment(params: {\n  payerAddress: `0x${string}`;\n  required: PersonalServerPaymentRequired;\n  config: EscrowPaymentConfig;\n}): Promise<DirectPaymentReceipt> {\n  return authorizeEscrowPayment({\n    ...params,\n    required: {\n      ...params.required,\n      opType: GRANT_OP_TYPE,\n      opId: params.required.grantId,\n    },\n  });\n}\n\n/**\n * Authorize a validated grant or data-access operation through the escrow\n * gateway.\n */\nexport async function authorizeEscrowPayment(params: {\n  /** Address whose escrow balance pays for the operation. */\n  payerAddress: `0x${string}`;\n  /** Validated operation to authorize. */\n  required: PersonalServerPaymentOperation;\n  /** Escrow gateway and signing configuration. */\n  config: EscrowPaymentConfig;\n}): Promise<DirectPaymentReceipt> {\n  const { payerAddress, config } = params;\n  const signed = await signEscrowPayment(params);\n\n  const result = await config.client.payForOp({\n    payerAddress,\n    opType: signed.message.opType,\n    opId: signed.message.opId,\n    asset: signed.message.asset,\n    amount: signed.message.amount,\n    paymentNonce: signed.message.paymentNonce,\n    signature: signed.signature,\n    accessRecord: signed.accessRecord,\n  });\n\n  return toDirectPaymentReceipt(result);\n}\n", "/**\n * Personal Server data-read request builder and the 402 -> escrow-pay -> retry loop.\n *\n * @remarks\n * The read targets the Personal Server data path (`/v1/data/{scope}`),\n * authenticates with a Web3Signed header (built on {@link buildWeb3SignedHeader}),\n * and \u2014 on `402 Payment Required` \u2014 signs the challenged escrow operation and\n * retries once.\n *\n * The 402 body is parsed into a validated grant or receipt-bound data-access\n * operation, which drives the escrow settlement.\n *\n * @category Direct\n * @module direct/personal-server-read\n */\n\nimport { buildWeb3SignedHeader } from \"../auth/web3-signed-builder\";\nimport type { Web3SignedSignFn } from \"../auth/web3-signed-builder\";\nimport {\n  NATIVE_ASSET_ADDRESS,\n  type EscrowAccessRecord,\n} from \"../protocol/escrow\";\nimport {\n  buildEscrowPaymentHeader,\n  DATA_ACCESS_OP_TYPE,\n  GRANT_OP_TYPE,\n  paymentResponseMetadataFromHeader,\n  type EscrowPaymentHeaderConfig,\n} from \"./escrow-payment\";\nimport { PaymentRequiredError, PersonalServerReadError } from \"./errors\";\nimport { DataPointDeletedError } from \"../errors\";\nimport {\n  isDataPointTombstone,\n  tombstoneDeletedAt,\n} from \"../protocol/data-point-deletion\";\nimport { readJsonValue } from \"../utils/response-body\";\nimport type {\n  DirectPaymentResponseMetadata,\n  PersonalServerDataAccessPaymentOperation,\n  PersonalServerPaymentOperation,\n} from \"./types\";\n\n/** Minimal `Response`-like shape so the read loop is testable without a DOM. */\nexport interface FetchResponseLike {\n  ok: boolean;\n  status: number;\n  statusText: string;\n  headers: { get(name: string): string | null };\n  json(): Promise<unknown>;\n  text(): Promise<string>;\n}\n\n/** Minimal `fetch` signature accepted by {@link readPersonalServerData}. */\nexport type PersonalServerFetch = (\n  input: string,\n  init: {\n    method: string;\n    headers: Record<string, string>;\n  },\n) => Promise<FetchResponseLike>;\n\n/** A built, ready-to-send Personal Server data read request. */\nexport interface PersonalServerDataReadRequest {\n  /** Absolute URL of the read endpoint. */\n  url: string;\n  /** HTTP method (always `\"GET\"`). */\n  method: \"GET\";\n  /** Request path used in the Web3Signed `uri` claim (e.g. `/v1/data/{scope}`). */\n  path: string;\n  /** Headers including the Web3Signed `Authorization` value. */\n  headers: Record<string, string>;\n}\n\n/**\n * Transport-level retry knobs for {@link readPersonalServerData}.\n *\n * @remarks\n * Applies only when the underlying `fetch` **throws** (connection reset, DNS,\n * socket died mid-handshake \u2014 the browser-PS relay drop window). A received\n * HTTP response is never retried here: 402 has its own payment loop and other\n * statuses are surfaced to the caller unchanged.\n */\nexport interface PersonalServerTransportRetryOptions {\n  /** Total attempts including the first (default 3). `1` disables retries. */\n  attempts?: number;\n  /** Delay before the first retry (ms); doubles per retry (default 1_000). */\n  initialDelayMs?: number;\n  /** Cap on the between-retry delay (ms, default 5_000). */\n  maxDelayMs?: number;\n}\n\nconst TRANSPORT_RETRY_DEFAULTS: Required<PersonalServerTransportRetryOptions> =\n  {\n    attempts: 3,\n    initialDelayMs: 1_000,\n    maxDelayMs: 5_000,\n  };\n\n/** Clamp a caller-supplied attempt count to a finite integer >= 1. */\nfunction resolveAttempts(attempts: number): number {\n  return Number.isFinite(attempts) ? Math.max(1, Math.floor(attempts)) : 1;\n}\n\n/** An aborted request is the caller's intent to stop \u2014 never retry it. */\nfunction isAbortError(error: unknown): boolean {\n  return error instanceof Error && error.name === \"AbortError\";\n}\n\nconst sleep = (ms: number) =>\n  new Promise<void>((resolve) => setTimeout(resolve, ms));\n\n/**\n * Run a fetch with bounded transport retries.\n *\n * Each attempt rebuilds the request via `buildRequest` so the Web3Signed\n * header is freshly signed (local app-key signature \u2014 cheap), while letting\n * the caller pin anything that must NOT be regenerated across attempts\n * (an already-signed `X-PAYMENT` header keeps its paymentNonce, so a retry\n * can never mint a second escrow payment for the same read).\n */\nasync function fetchWithTransportRetry(\n  fetchFn: PersonalServerFetch,\n  buildRequest: () => Promise<{\n    url: string;\n    method: string;\n    headers: Record<string, string>;\n  }>,\n  retry: Required<PersonalServerTransportRetryOptions>,\n): Promise<FetchResponseLike> {\n  const attempts = resolveAttempts(retry.attempts);\n  let lastError: unknown;\n  for (let attempt = 0; attempt < attempts; attempt += 1) {\n    if (attempt > 0) {\n      await sleep(\n        Math.min(retry.maxDelayMs, retry.initialDelayMs * 2 ** (attempt - 1)),\n      );\n    }\n    const request = await buildRequest();\n    try {\n      return await fetchFn(request.url, {\n        method: request.method,\n        headers: request.headers,\n      });\n    } catch (error) {\n      // An abort is a deliberate cancellation, not a flaky tunnel \u2014 surface it\n      // immediately instead of burning attempts (and backoff) on it.\n      if (isAbortError(error)) {\n        throw error;\n      }\n      lastError = error;\n    }\n  }\n  throw lastError;\n}\n\n/** Outcome of {@link readPersonalServerData}. */\nexport interface PersonalServerReadResult {\n  /** The decoded JSON payload returned by the Personal Server. */\n  data: unknown;\n  /**\n   * Shape-validated but unauthenticated payment metadata echoed by the\n   * Personal Server. Never treat this field as accounting proof.\n   */\n  payment?: DirectPaymentResponseMetadata;\n}\n\nfunction stripTrailingSlash(url: string): string {\n  return url.replace(/\\/+$/, \"\");\n}\n\n/** Compute the data path for a scope (`/v1/data/{scope}`). */\nexport function dataPathForScope(scope: string): string {\n  return `/v1/data/${encodeURIComponent(scope)}`;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n  return value && typeof value === \"object\" && !Array.isArray(value)\n    ? (value as Record<string, unknown>)\n    : undefined;\n}\n\nfunction stringField(\n  record: Record<string, unknown> | undefined,\n  field: string,\n): string | undefined {\n  const value = record?.[field];\n  return typeof value === \"string\" ? value : undefined;\n}\n\nfunction parseAccessRecord(value: unknown): EscrowAccessRecord | undefined {\n  const record = asRecord(value);\n  const dataPointId = stringField(record, \"dataPointId\");\n  const version = stringField(record, \"version\");\n  const accessor = stringField(record, \"accessor\");\n  const recordId = stringField(record, \"recordId\");\n  const signature = stringField(record, \"signature\");\n\n  if (!dataPointId || !version || !accessor || !recordId || !signature) {\n    return undefined;\n  }\n\n  return {\n    dataPointId: dataPointId as `0x${string}`,\n    version,\n    accessor: accessor as `0x${string}`,\n    recordId: recordId as `0x${string}`,\n    signature: signature as `0x${string}`,\n  };\n}\n\nfunction isBytes32Hex(value: string): boolean {\n  return /^0x[0-9a-fA-F]{64}$/.test(value);\n}\n\nconst UINT256_MAX = (1n << 256n) - 1n;\n\nfunction isAddressHex(value: string): boolean {\n  return /^0x[0-9a-fA-F]{40}$/.test(value);\n}\n\nfunction isUint256Decimal(value: string, allowZero: boolean): boolean {\n  const pattern = allowZero ? /^(0|[1-9]\\d*)$/ : /^[1-9]\\d*$/;\n  return (\n    value.length <= UINT256_MAX.toString().length &&\n    pattern.test(value) &&\n    BigInt(value) <= UINT256_MAX\n  );\n}\n\nfunction isValidDataAccessRecord(record: EscrowAccessRecord): boolean {\n  return (\n    isBytes32Hex(record.dataPointId) &&\n    isUint256Decimal(record.version, false) &&\n    isAddressHex(record.accessor) &&\n    isBytes32Hex(record.recordId) &&\n    /^0x[0-9a-fA-F]{130}$/.test(record.signature)\n  );\n}\n\nfunction parseLegacyGrantOperation(params: {\n  challengeGrantId?: string;\n  challengeOpId?: string;\n  challengeOpType?: string;\n  grantId: string;\n}): { opType: typeof GRANT_OP_TYPE; opId: string } {\n  const { challengeGrantId, challengeOpId, challengeOpType, grantId } = params;\n\n  const opType = challengeOpType ?? GRANT_OP_TYPE;\n  if (opType !== GRANT_OP_TYPE) {\n    throw new PersonalServerReadError(\n      \"Personal Server payment challenge used an unsupported escrow op type\",\n      402,\n      { opType: challengeOpType },\n    );\n  }\n\n  const opId = challengeOpId ?? challengeGrantId ?? grantId;\n\n  if (!opId || !isBytes32Hex(opId)) {\n    throw new PersonalServerReadError(\n      \"Personal Server payment challenge used an invalid escrow op id\",\n      402,\n      { opId },\n    );\n  }\n\n  if (opId.toLowerCase() !== grantId.toLowerCase()) {\n    throw new PersonalServerReadError(\n      \"Personal Server payment challenge did not match the requested grant\",\n      402,\n      { opId, grantId },\n    );\n  }\n\n  return { opType: GRANT_OP_TYPE, opId };\n}\n\nfunction hasDataAccessMarker(body: Record<string, unknown>): boolean {\n  if (stringField(body, \"opType\") === DATA_ACCESS_OP_TYPE) return true;\n  return (\n    Array.isArray(body.accepts) &&\n    body.accepts.some((value) => {\n      const accept = asRecord(value);\n      return (\n        stringField(asRecord(accept?.message), \"opType\") === DATA_ACCESS_OP_TYPE\n      );\n    })\n  );\n}\n\nfunction parseCanonicalDataAccessAccept(\n  value: unknown,\n): Omit<PersonalServerDataAccessPaymentOperation, \"grantId\" | \"raw\"> | null {\n  const accept = asRecord(value);\n  const message = asRecord(accept?.message);\n  if (\n    stringField(accept, \"scheme\") !== \"vana-escrow-grant\" ||\n    stringField(message, \"opType\") !== DATA_ACCESS_OP_TYPE\n  ) {\n    return null;\n  }\n\n  const network = stringField(accept, \"network\");\n  const payerAddress = stringField(message, \"payerAddress\");\n  const opId = stringField(message, \"opId\");\n  const asset = stringField(message, \"asset\");\n  const amount = stringField(message, \"amount\");\n  const paymentNonce = stringField(message, \"paymentNonce\");\n  const accessRecord = parseAccessRecord(accept?.accessRecord);\n  const acceptAsset = stringField(accept, \"asset\");\n  const acceptAmount = stringField(accept, \"amount\");\n\n  if (\n    !network ||\n    !payerAddress ||\n    !isAddressHex(payerAddress) ||\n    !opId ||\n    !isBytes32Hex(opId) ||\n    !asset ||\n    !isAddressHex(asset) ||\n    !amount ||\n    !isUint256Decimal(amount, true) ||\n    !paymentNonce ||\n    !isUint256Decimal(paymentNonce, false) ||\n    !accessRecord ||\n    !isValidDataAccessRecord(accessRecord) ||\n    payerAddress.toLowerCase() !== accessRecord.accessor.toLowerCase() ||\n    opId.toLowerCase() !== accessRecord.recordId.toLowerCase() ||\n    !acceptAsset ||\n    acceptAsset.toLowerCase() !== asset.toLowerCase() ||\n    acceptAmount !== amount\n  ) {\n    return null;\n  }\n\n  return {\n    opType: DATA_ACCESS_OP_TYPE,\n    opId,\n    network,\n    paymentNonce,\n    accessRecord,\n    asset,\n    amount,\n  };\n}\n\nfunction parseCanonicalDataAccessPayment(params: {\n  body: Record<string, unknown>;\n  grantId: string;\n  raw: unknown;\n}): PersonalServerDataAccessPaymentOperation | undefined {\n  const { body, grantId, raw } = params;\n  if (body.x402Version !== 1 || body.error !== \"PAYMENT_REQUIRED\") {\n    throw new PersonalServerReadError(\n      \"Personal Server data-access payment response was not a canonical x402 challenge\",\n      402,\n    );\n  }\n\n  const operation = Array.isArray(body.accepts)\n    ? body.accepts\n        .map(parseCanonicalDataAccessAccept)\n        .find((candidate) => candidate !== null)\n    : undefined;\n  if (!operation) {\n    return undefined;\n  }\n\n  return { grantId, raw, ...operation };\n}\n\nfunction preferredLegacyAccept(body: Record<string, unknown>) {\n  if (!Array.isArray(body.accepts)) return undefined;\n  return body.accepts.map(asRecord).find((accept) => {\n    const message = asRecord(accept?.message);\n    return (\n      stringField(accept, \"scheme\") === \"vana-escrow-grant\" &&\n      stringField(message, \"opType\") === GRANT_OP_TYPE\n    );\n  });\n}\n\n/**\n * Build a Web3Signed-authenticated Personal Server data read request.\n *\n * @param params - Personal Server URL, scope, grant id, and an EIP-191 signer.\n * @returns The request URL, method, path, and headers (including `Authorization`).\n */\nexport async function buildPersonalServerDataReadRequest(params: {\n  /** Base URL of the user's Personal Server. */\n  personalServerUrl: string;\n  /** Scope to read (e.g. `\"icloud_notes.notes\"`). */\n  scope: string;\n  /** Grant id authorizing the read. */\n  grantId: string;\n  /** EIP-191 signer for the Web3Signed header (the app key). */\n  signMessage: Web3SignedSignFn;\n}): Promise<PersonalServerDataReadRequest> {\n  const base = stripTrailingSlash(params.personalServerUrl);\n  const path = dataPathForScope(params.scope);\n  const authorization = await buildWeb3SignedHeader({\n    signMessage: params.signMessage,\n    aud: base,\n    method: \"GET\",\n    uri: path,\n    grantId: params.grantId,\n  });\n  const headers: Record<string, string> = {\n    Authorization: authorization,\n    Accept: \"application/json\",\n  };\n  return { url: `${base}${path}`, method: \"GET\", path, headers };\n}\n\n/**\n * Parse a `402 Payment Required` body into a validated payment operation.\n *\n * @remarks\n * Accepts a few field spellings and falls back to the read's own grantId and the\n * native asset when a field is absent from a legacy grant challenge.\n *\n * Receipt-bound `data_access` uses a fail-closed canonical path: one compatible\n * `accepts` entry must contain the scheme, network, message, and complete\n * receipt. Its positive uint256 `paymentNonce` is mandatory because the\n * Personal Server encodes challenge freshness in that nonce and checks it on\n * retry. This parser shape-validates the receipt and binds `opId` to `recordId`;\n * it does not recover or verify the server signature.\n *\n * @param res - The 402 response.\n * @param grantId - The grant id of the read (default legacy grant `opId`).\n * @returns The parsed payment requirement.\n */\nexport async function parsePersonalServerPaymentRequired(\n  res: FetchResponseLike,\n  grantId: string,\n): Promise<PersonalServerPaymentOperation> {\n  let raw: unknown = undefined;\n  try {\n    raw = await res.json();\n  } catch {\n    raw = undefined;\n  }\n  const body = asRecord(raw) ?? {};\n  if (hasDataAccessMarker(body)) {\n    const dataAccessOperation = parseCanonicalDataAccessPayment({\n      body,\n      grantId,\n      raw,\n    });\n    if (dataAccessOperation) return dataAccessOperation;\n  }\n\n  // Legacy grant challenges predate the canonical x402 envelope. Retain their\n  // field fallbacks only for truly flat bodies. Once an accepts envelope is\n  // present, validate its canonical framing and select only a compatible offer.\n  const hasAcceptsEnvelope = Object.prototype.hasOwnProperty.call(\n    body,\n    \"accepts\",\n  );\n  if (\n    hasAcceptsEnvelope &&\n    (body.x402Version !== 1 || body.error !== \"PAYMENT_REQUIRED\")\n  ) {\n    throw new PersonalServerReadError(\n      \"Personal Server grant payment response was not a canonical x402 challenge\",\n      402,\n    );\n  }\n  const accept = preferredLegacyAccept(body);\n  if (hasDataAccessMarker(body) && !accept) {\n    throw new PersonalServerReadError(\n      \"Personal Server data-access payment challenge was untrusted or incomplete\",\n      402,\n    );\n  }\n  if (hasAcceptsEnvelope && !accept) {\n    throw new PersonalServerReadError(\n      \"Personal Server grant payment challenge had no compatible escrow offer\",\n      402,\n    );\n  }\n\n  if (accept) {\n    const message = asRecord(accept.message);\n    const network = stringField(accept, \"network\");\n    const payerAddress = stringField(message, \"payerAddress\");\n    const opId = stringField(message, \"opId\");\n    const asset = stringField(message, \"asset\");\n    const amount = stringField(message, \"amount\");\n    const paymentNonce = stringField(message, \"paymentNonce\");\n    const acceptAsset = stringField(accept, \"asset\");\n    const acceptAmount = stringField(accept, \"amount\");\n    const accessRecord = parseAccessRecord(accept.accessRecord);\n    const hasAccessRecord = accept.accessRecord !== undefined;\n    if (\n      !network ||\n      !payerAddress ||\n      !isAddressHex(payerAddress) ||\n      !opId ||\n      !isBytes32Hex(opId) ||\n      !asset ||\n      !isAddressHex(asset) ||\n      !amount ||\n      !isUint256Decimal(amount, true) ||\n      !paymentNonce ||\n      !isUint256Decimal(paymentNonce, false) ||\n      !acceptAsset ||\n      acceptAsset.toLowerCase() !== asset.toLowerCase() ||\n      acceptAmount !== amount ||\n      (hasAccessRecord &&\n        (!accessRecord ||\n          !isValidDataAccessRecord(accessRecord) ||\n          accessRecord.accessor.toLowerCase() !==\n            payerAddress.toLowerCase())) ||\n      (amount === \"0\" && !accessRecord)\n    ) {\n      throw new PersonalServerReadError(\n        \"Personal Server grant payment challenge was untrusted or incomplete\",\n        402,\n      );\n    }\n    const operation = parseLegacyGrantOperation({\n      challengeOpId: opId,\n      challengeOpType: stringField(message, \"opType\"),\n      grantId,\n    });\n    return {\n      grantId,\n      ...operation,\n      network,\n      paymentNonce,\n      asset,\n      amount,\n      raw,\n      ...(accessRecord ? { accessRecord } : {}),\n    };\n  }\n\n  const challengeGrantId = stringField(body, \"grantId\");\n  const challengeOpId = stringField(body, \"opId\");\n  const challengeOpType = stringField(body, \"opType\");\n\n  const accessRecord = parseAccessRecord(body.accessRecord);\n  const operation = parseLegacyGrantOperation({\n    challengeGrantId,\n    challengeOpId,\n    challengeOpType,\n    grantId,\n  });\n\n  const amountValue =\n    stringField(body, \"amount\") ??\n    stringField(body, \"maxAmountRequired\") ??\n    \"0\";\n  const payment = {\n    grantId,\n    network: stringField(body, \"network\"),\n    paymentNonce: stringField(body, \"paymentNonce\"),\n    asset: stringField(body, \"asset\") ?? NATIVE_ASSET_ADDRESS,\n    amount: amountValue,\n    raw,\n  };\n  return {\n    ...payment,\n    ...operation,\n    ...(accessRecord ? { accessRecord } : {}),\n  };\n}\n\nfunction hasPositiveAmount(amount: string): boolean {\n  if (!/^\\d+$/.test(amount)) return false;\n  return BigInt(amount) > 0n;\n}\n\nfunction isReceiptOnlyGrantAcknowledgment(\n  required: PersonalServerPaymentOperation,\n  payerAddress: string,\n): boolean {\n  return (\n    required.opType === GRANT_OP_TYPE &&\n    required.amount === \"0\" &&\n    required.accessRecord !== undefined &&\n    isValidDataAccessRecord(required.accessRecord) &&\n    required.accessRecord.accessor.toLowerCase() === payerAddress.toLowerCase()\n  );\n}\n\n/**\n * Read approved data from a Personal Server, settling a 402 via escrow.\n *\n * @remarks\n * Sends a Web3Signed-authenticated `GET /v1/data/{scope}`. On `402`, parses what\n * is owed, authorizes the challenged escrow operation, and retries once. If\n * escrow is not configured, throws {@link PaymentRequiredError} carrying the\n * parsed requirement so callers can debug amount/asset.\n *\n * Transport failures (fetch throwing \u2014 the browser-PS relay reconnect window)\n * are retried with backoff per `transportRetry` (default 3 attempts). The paid\n * retry reuses the already-signed `X-PAYMENT` header, so transport retries can\n * never double-pay.\n *\n * @param params - Connection details, app signer, optional escrow config and fetch.\n * @returns `{ data, payment? }`.\n */\nexport async function readPersonalServerData(params: {\n  personalServerUrl: string;\n  scope: string;\n  grantId: string;\n  payerAddress: `0x${string}`;\n  signMessage: Web3SignedSignFn;\n  escrow?: EscrowPaymentHeaderConfig;\n  fetchFn?: PersonalServerFetch;\n  transportRetry?: PersonalServerTransportRetryOptions;\n}): Promise<PersonalServerReadResult> {\n  const fetchFn =\n    params.fetchFn ?? (globalThis.fetch as unknown as PersonalServerFetch);\n  if (!fetchFn) {\n    throw new PersonalServerReadError(\n      \"No fetch implementation available for Personal Server read\",\n    );\n  }\n  const transportRetry = {\n    ...TRANSPORT_RETRY_DEFAULTS,\n    ...params.transportRetry,\n  };\n\n  const buildRequest = () =>\n    buildPersonalServerDataReadRequest({\n      personalServerUrl: params.personalServerUrl,\n      scope: params.scope,\n      grantId: params.grantId,\n      signMessage: params.signMessage,\n    });\n\n  let res = await fetchWithTransportRetry(\n    fetchFn,\n    buildRequest,\n    transportRetry,\n  );\n\n  let payment: DirectPaymentResponseMetadata | undefined;\n\n  if (res.status === 402) {\n    const required = await parsePersonalServerPaymentRequired(\n      res,\n      params.grantId,\n    );\n    if (!params.escrow) {\n      throw new PaymentRequiredError(\n        \"Personal Server requires payment but no escrow config is set\",\n        {\n          scope: params.scope,\n          grantId: required.grantId,\n          asset: required.asset,\n          amount: required.amount,\n        },\n      );\n    }\n\n    if (\n      required.opType === GRANT_OP_TYPE &&\n      !hasPositiveAmount(required.amount) &&\n      !isReceiptOnlyGrantAcknowledgment(required, params.payerAddress)\n    ) {\n      throw new PaymentRequiredError(\n        \"Personal Server payment challenge included neither a positive amount nor a valid access receipt\",\n        {\n          scope: params.scope,\n          grantId: required.grantId,\n          asset: required.asset,\n          amount: required.amount,\n        },\n      );\n    }\n\n    const paymentHeader = await buildEscrowPaymentHeader({\n      payerAddress: params.payerAddress,\n      required,\n      config: params.escrow,\n    });\n\n    // Re-sign and retry with x402 payment proof for the Personal Server to\n    // validate. The payment header is built exactly once: transport retries\n    // below re-sign only the Web3Signed auth and resend the SAME X-PAYMENT\n    // (same paymentNonce), so a dropped tunnel cannot mint a second payment.\n    res = await fetchWithTransportRetry(\n      fetchFn,\n      async () => {\n        const retry = await buildRequest();\n        return {\n          ...retry,\n          headers: { ...retry.headers, \"X-PAYMENT\": paymentHeader },\n        };\n      },\n      transportRetry,\n    );\n\n    if (res.status === 402) {\n      throw new PaymentRequiredError(\n        \"Personal Server still requires payment after escrow settlement\",\n        {\n          scope: params.scope,\n          grantId: required.grantId,\n          asset: required.asset,\n          amount: required.amount,\n          payment,\n        },\n      );\n    }\n  }\n\n  // 410 = the scope was tombstoned by its owner. Typed so builders can\n  // branch on \"gone\" without parsing a generic read failure.\n  if (res.status === 410) {\n    throw new DataPointDeletedError(\n      `Personal Server scope '${params.scope}' has been deleted`,\n      {\n        scope: params.scope,\n        deletedAt: tombstoneDeletedAt(await readJsonValue(res)),\n      },\n    );\n  }\n\n  if (!res.ok) {\n    const detail = await res.text().catch(() => \"\");\n    throw new PersonalServerReadError(\n      `Personal Server read failed: ${res.status} ${res.statusText}`,\n      res.status,\n      { scope: params.scope, body: detail.slice(0, 500) },\n    );\n  }\n\n  payment = paymentResponseMetadataFromHeader(\n    res.headers.get(\"X-PAYMENT-RESPONSE\"),\n  );\n  const data: unknown = await res.json();\n  // Never return a tombstone as data, even on a 200 that carries the deleted\n  // row (deletedAt / tombstone hash pair).\n  if (isDataPointTombstone(data)) {\n    throw new DataPointDeletedError(\n      `Personal Server scope '${params.scope}' has been deleted`,\n      { scope: params.scope, deletedAt: tombstoneDeletedAt(data) },\n    );\n  }\n  return { data, payment };\n}\n", "/**\n * Typed errors returned by Personal Server endpoints.\n *\n * @remarks\n * vana-connect (and other PS clients) need to branch on a small, stable set\n * of lowercase error codes. Personal Server routes currently return protocol\n * errors as `{ error: { code, errorCode, message } }`, while older PoC\n * clients used `{ code, message }`; the parser accepts both shapes.\n *\n * @category Auth\n */\n\n/** Stable error codes returned by Personal Server. */\nexport type PSErrorCode =\n  | \"missing_auth\"\n  | \"invalid_signature\"\n  | \"unregistered_builder\"\n  | \"not_owner\"\n  | \"expired_token\"\n  | \"grant_invalid\"\n  | \"grant_required\"\n  | \"grant_expired\"\n  | \"grant_revoked\"\n  | \"scope_mismatch\"\n  | \"fee_required\"\n  | \"ps_unavailable\"\n  | \"server_not_configured\"\n  | \"content_too_large\";\n\n/** Typed error wrapping a non-2xx Personal Server response. */\nexport class PSError extends Error {\n  constructor(\n    public readonly code: PSErrorCode,\n    message: string,\n  ) {\n    super(message);\n    this.name = \"PSError\";\n  }\n}\n\nconst KNOWN_CODES: ReadonlySet<PSErrorCode> = new Set<PSErrorCode>([\n  \"missing_auth\",\n  \"invalid_signature\",\n  \"unregistered_builder\",\n  \"not_owner\",\n  \"expired_token\",\n  \"grant_invalid\",\n  \"grant_required\",\n  \"grant_expired\",\n  \"grant_revoked\",\n  \"scope_mismatch\",\n  \"fee_required\",\n  \"ps_unavailable\",\n  \"server_not_configured\",\n  \"content_too_large\",\n]);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return value !== null && typeof value === \"object\" && !Array.isArray(value);\n}\n\nfunction normalizeCode(value: unknown): PSErrorCode | null {\n  if (typeof value !== \"string\") {\n    return null;\n  }\n  const code = value.toLowerCase() as PSErrorCode;\n  return KNOWN_CODES.has(code) ? code : null;\n}\n\nfunction extractPSErrorBody(\n  body: unknown,\n): { code: PSErrorCode; message: string } | null {\n  if (!isRecord(body)) {\n    return null;\n  }\n\n  const nested = isRecord(body.error) ? body.error : null;\n  const code = normalizeCode(\n    nested?.errorCode ?? nested?.code ?? body.errorCode ?? body.code,\n  );\n  const message = nested?.message ?? body.message;\n\n  if (!code || typeof message !== \"string\") {\n    return null;\n  }\n\n  return { code, message };\n}\n\n/**\n * Read a Personal Server JSON error body from a non-2xx {@link Response} and\n * return the typed {@link PSError}. The returned code is always lowercase.\n *\n * @returns A {@link PSError} for non-2xx responses with a recognised code,\n *   or `null` for 2xx responses, malformed JSON, or unrecognised codes.\n */\nexport async function parsePSError(\n  response: Response,\n): Promise<PSError | null> {\n  if (response.ok) {\n    return null;\n  }\n\n  let body: unknown;\n  try {\n    body = await response.json();\n  } catch {\n    return null;\n  }\n\n  const errorBody = extractPSErrorBody(body);\n  return errorBody ? new PSError(errorBody.code, errorBody.message) : null;\n}\n"],
  "mappings": "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,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA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EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AAAA,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",
  "names": ["import_viem", "import_viem", "import_viem", "import_viem", "secp256k1", "import_viem", "import_hmac", "import_sha2", "nobleSha512", "import_viem", "secp256k1", "getOpenPGP", "init_browser", "openpgp", "mokshaTestnet", "vanaMainnet", "import_viem", "DLPRegistryTreasuryABI", "DLPRegistryTreasuryABI", "import_viem", "vanaMainnet", "mokshaTestnet", "import_viem", "import_sha2", "safeText", "import_viem", "secp256k1Import", "import_crypto", "import_secp256k1", "secp256k1", "secp256k1Import", "openpgp", "init_browser", "NodePlatformAdapter", "BrowserPlatformAdapter", "init_browser", "NodePlatformAdapter", "import_sha2", "import_viem", "import_viem", "import_errors", "secp256k1", "import_viem", "import_sha2", "import_viem", "import_accounts", "import_sha2", "import_viem", "isPlainObject", "crypto", "import_errors", "CONTRACTS", "import_viem", "import_errors", "isRecord", "sleep", "CONTRACTS", "import_viem", "vanaMainnet", "accountAddress", "import_viem", "assertAddress", "getAccountAddress", "accountAddress", "import_viem", "assertAddress", "isRecord", "import_viem", "import_viem", "import_viem", "ESCROW_DEPOSIT_ABI", "import_viem", "DataPointStatus", "import_viem", "import_errors", "import_viem", "import_errors", "isRecord", "resolveFetch", "isRecord", "assertAddress", "getAccountAddress", "accountAddress", "import_errors", "import_zod", "import_zod", "import_sha2", "import_viem", "import_zod", "import_errors", "import_sha2", "import_viem", "import_errors", "normalizeBaseUrl", "resolveFetch", "sleep", "bucket", "webCrypto", "resolveFetch", "normalizeBaseUrl", "isRecord", "import_zod", "import_errors", "resolveFetch", "normalizeBaseUrl", "sleep", "import_zod", "import_errors", "normalizeBaseUrl", "resolveFetch", "sleep", "abortError", "import_errors", "body", "isUint256Decimal", "import_errors", "asRecord", "stringField", "UINT256_MAX", "isAddressHex", "isUint256Decimal", "asRecord", "stringField", "accessRecord", "isAddressHex", "isUint256Decimal", "operation", "isRecord"]
}
