{"version":3,"file":"index.cjs","sources":["../src/contracts/Registry.js","../src/contracts/Resolver.js","../src/utils/errors.js","../src/contracts/TLD.js","../src/contracts/RWAirdrop.js","../src/utils/helpers.js","../src/ODudeSDK.js","../src/index.js","../src/index.js?commonjs-entry"],"sourcesContent":["const { Contract } = require('ethers');\nconst RegistryABI = require('../../abi/Registry.json');\n\n/**\n * Registry contract wrapper\n * Handles TLD and subdomain registration, ownership, and metadata\n */\nclass Registry {\n  /**\n   * @param {string} address - Contract address\n   * @param {ethers.Provider|ethers.Signer} providerOrSigner - Ethers provider or signer\n   */\n  constructor(address, providerOrSigner) {\n    this.address = address;\n    this.contract = new Contract(address, RegistryABI.abi, providerOrSigner);\n  }\n\n  // ==================== Read-only Functions ====================\n\n  /**\n   * Get the name of the NFT collection\n   * @returns {Promise<string>}\n   */\n  async name() {\n    return await this.contract.name();\n  }\n\n  /**\n   * Get the symbol of the NFT collection\n   * @returns {Promise<string>}\n   */\n  async symbol() {\n    return await this.contract.symbol();\n  }\n\n  /**\n   * Get total supply of registered names\n   * @returns {Promise<bigint>}\n   */\n  async totalSupply() {\n    return await this.contract.totalSupply();\n  }\n\n  /**\n   * Get owner of a token\n   * @param {number|string|bigint} tokenId - Token ID\n   * @returns {Promise<string>} Owner address\n   */\n  async ownerOf(tokenId) {\n    return await this.contract.ownerOf(tokenId);\n  }\n\n  /**\n   * Get balance of an address\n   * @param {string} address - Owner address\n   * @returns {Promise<bigint>}\n   */\n  async balanceOf(address) {\n    return await this.contract.balanceOf(address);\n  }\n\n  /**\n   * Get token ID by name\n   * @param {string} name - ODude name\n   * @returns {Promise<bigint>}\n   */\n  async getTokenId(name) {\n    return await this.contract.getTokenId(name);\n  }\n\n  /**\n   * Get owner by name\n   * @param {string} name - ODude name\n   * @returns {Promise<string>} Owner address\n   */\n  async getOwnerByName(name) {\n    return await this.contract.getOwnerByName(name);\n  }\n\n  /**\n   * Get name by token ID\n   * @param {number|string|bigint} tokenId - Token ID\n   * @returns {Promise<string>}\n   */\n  async nameOf(tokenId) {\n    return await this.contract.nameOf(tokenId);\n  }\n\n  /**\n   * Get NFT metadata\n   * @param {number|string|bigint} tokenId - Token ID\n   * @returns {Promise<Object>} Metadata object with id, name, isTLD, parentTLD\n   */\n  async getNFTMetadata(tokenId) {\n    const metadata = await this.contract.getNFTMetadata(tokenId);\n    return {\n      id: metadata.id,\n      name: metadata.name,\n      isTLD: metadata.isTLD,\n      parentTLD: metadata.parentTLD\n    };\n  }\n\n  /**\n   * Get token URI\n   * @param {number|string|bigint} tokenId - Token ID\n   * @returns {Promise<string>}\n   */\n  async tokenURI(tokenId) {\n    return await this.contract.tokenURI(tokenId);\n  }\n\n  /**\n   * Get token by index\n   * @param {number|string|bigint} index - Index\n   * @returns {Promise<bigint>}\n   */\n  async tokenByIndex(index) {\n    return await this.contract.tokenByIndex(index);\n  }\n\n  /**\n   * Get token of owner by index\n   * @param {string} owner - Owner address\n   * @param {number|string|bigint} index - Index\n   * @returns {Promise<bigint>}\n   */\n  async tokenOfOwnerByIndex(owner, index) {\n    return await this.contract.tokenOfOwnerByIndex(owner, index);\n  }\n\n  /**\n   * Get approved address for token\n   * @param {number|string|bigint} tokenId - Token ID\n   * @returns {Promise<string>}\n   */\n  async getApproved(tokenId) {\n    return await this.contract.getApproved(tokenId);\n  }\n\n  /**\n   * Check if operator is approved for all\n   * @param {string} owner - Owner address\n   * @param {string} operator - Operator address\n   * @returns {Promise<boolean>}\n   */\n  async isApprovedForAll(owner, operator) {\n    return await this.contract.isApprovedForAll(owner, operator);\n  }\n\n  /**\n   * Get contract balance\n   * @returns {Promise<bigint>}\n   */\n  async getBalance() {\n    return await this.contract.getBalance();\n  }\n\n  /**\n   * Check if contract is paused\n   * @returns {Promise<boolean>}\n   */\n  async paused() {\n    return await this.contract.paused();\n  }\n\n  /**\n   * Get contract owner\n   * @returns {Promise<string>}\n   */\n  async owner() {\n    return await this.contract.owner();\n  }\n\n  /**\n   * Get TLD contract address\n   * @returns {Promise<string>}\n   */\n  async getTLDContract() {\n    return await this.contract.getTLDContract();\n  }\n\n  /**\n   * Get Resolver contract address\n   * @returns {Promise<string>}\n   */\n  async getResolverContract() {\n    return await this.contract.getResolverContract();\n  }\n\n  // ==================== Write Functions ====================\n\n  /**\n   * mintDomain a name (TLD or subdomain)\n   * @param {number|string|bigint} tokenId - Token ID\n   * @param {string} name - Name to mintDomain\n   * @param {string} tokenUri - Token URI\n   * @param {string} to - Recipient address\n   * @param {Object} options - Transaction options (value, gasLimit, etc.)\n   * @returns {Promise<Object>} Transaction response\n   */\n  async mintDomain(tokenId, name, tokenUri, to, options = {}) {\n    return await this.contract.mintDomain(tokenId, name, tokenUri, to, options);\n  }\n\n  /**\n   * Set reverse resolution for a token\n   * @param {number|string|bigint} tokenId - Token ID\n   * @param {Object} options - Transaction options\n   * @returns {Promise<Object>} Transaction response\n   */\n  async setReverse(tokenId, options = {}) {\n    return await this.contract.setReverse(tokenId, options);\n  }\n\n  /**\n   * Set token URI\n   * @param {number|string|bigint} tokenId - Token ID\n   * @param {string} newTokenURI - New token URI\n   * @param {Object} options - Transaction options\n   * @returns {Promise<Object>} Transaction response\n   */\n  async setTokenURI(tokenId, newTokenURI, options = {}) {\n    return await this.contract.setTokenURI(tokenId, newTokenURI, options);\n  }\n\n  /**\n   * Approve address for token\n   * @param {string} to - Address to approve\n   * @param {number|string|bigint} tokenId - Token ID\n   * @returns {Promise<Object>} Transaction response\n   */\n  async approve(to, tokenId) {\n    return await this.contract.approve(to, tokenId);\n  }\n\n  /**\n   * Set approval for all\n   * @param {string} operator - Operator address\n   * @param {boolean} approved - Approved status\n   * @returns {Promise<Object>} Transaction response\n   */\n  async setApprovalForAll(operator, approved) {\n    return await this.contract.setApprovalForAll(operator, approved);\n  }\n\n  /**\n   * Transfer token\n   * @param {string} from - From address\n   * @param {string} to - To address\n   * @param {number|string|bigint} tokenId - Token ID\n   * @returns {Promise<Object>} Transaction response\n   */\n  async transferFrom(from, to, tokenId) {\n    return await this.contract.transferFrom(from, to, tokenId);\n  }\n\n  /**\n   * Safe transfer token\n   * @param {string} from - From address\n   * @param {string} to - To address\n   * @param {number|string|bigint} tokenId - Token ID\n   * @returns {Promise<Object>} Transaction response\n   */\n  async safeTransferFrom(from, to, tokenId) {\n    return await this.contract['safeTransferFrom(address,address,uint256)'](from, to, tokenId);\n  }\n\n  // ==================== Events ====================\n\n  /**\n   * Listen to TLDMinted events\n   * @param {Function} callback - Callback function\n   */\n  onTLDMinted(callback) {\n    this.contract.on('TLDMinted', callback);\n  }\n\n  /**\n   * Listen to SubdomainMinted events\n   * @param {Function} callback - Callback function\n   */\n  onSubdomainMinted(callback) {\n    this.contract.on('SubdomainMinted', callback);\n  }\n\n  /**\n   * Listen to Transfer events\n   * @param {Function} callback - Callback function\n   */\n  onTransfer(callback) {\n    this.contract.on('Transfer', callback);\n  }\n\n  /**\n   * Remove all listeners\n   */\n  removeAllListeners() {\n    this.contract.removeAllListeners();\n  }\n\n  // ==================== Batch Operations ====================\n\n  /**\n   * Get multiple names by token IDs\n   * @param {Array<number|string|bigint>} tokenIds - Array of token IDs\n   * @returns {Promise<Array<string>>} Array of names\n   */\n  async getMultipleNames(tokenIds) {\n    const promises = tokenIds.map(tokenId => this.nameOf(tokenId));\n    return await Promise.all(promises);\n  }\n\n  /**\n   * Get multiple owners by token IDs\n   * @param {Array<number|string|bigint>} tokenIds - Array of token IDs\n   * @returns {Promise<Array<string>>} Array of owner addresses\n   */\n  async getMultipleOwners(tokenIds) {\n    const promises = tokenIds.map(tokenId => this.ownerOf(tokenId));\n    return await Promise.all(promises);\n  }\n\n  /**\n   * Get multiple token metadata\n   * @param {Array<number|string|bigint>} tokenIds - Array of token IDs\n   * @returns {Promise<Array<Object>>} Array of metadata objects\n   */\n  async getMultipleMetadata(tokenIds) {\n    const promises = tokenIds.map(tokenId => this.getNFTMetadata(tokenId));\n    return await Promise.all(promises);\n  }\n\n  /**\n   * Get comprehensive info for multiple tokens\n   * @param {Array<number|string|bigint>} tokenIds - Array of token IDs\n   * @returns {Promise<Array<Object>>} Array of token info objects\n   */\n  async getMultipleTokenInfo(tokenIds) {\n    const promises = tokenIds.map(async (tokenId) => {\n      try {\n        const [name, owner, metadata, tokenURI] = await Promise.all([\n          this.nameOf(tokenId),\n          this.ownerOf(tokenId),\n          this.getNFTMetadata(tokenId),\n          this.tokenURI(tokenId)\n        ]);\n\n        return {\n          tokenId: tokenId.toString(),\n          name,\n          owner,\n          metadata,\n          tokenURI\n        };\n      } catch (error) {\n        return {\n          tokenId: tokenId.toString(),\n          error: error.message\n        };\n      }\n    });\n\n    return await Promise.all(promises);\n  }\n}\n\nmodule.exports = Registry;\n\n","const { Contract } = require('ethers');\nconst ResolverABI = require('../../abi/Resolver.json');\n\n/**\n * Resolver contract wrapper\n * Handles name resolution and reverse resolution\n */\nclass Resolver {\n  /**\n   * @param {string} address - Contract address\n   * @param {ethers.Provider|ethers.Signer} providerOrSigner - Ethers provider or signer\n   */\n  constructor(address, providerOrSigner) {\n    this.address = address;\n    this.contract = new Contract(address, ResolverABI.abi, providerOrSigner);\n  }\n\n  // ==================== Read-only Functions ====================\n\n  /**\n   * Resolve a name to an address\n   * @param {string} name - ODude name\n   * @returns {Promise<string>} Resolved address\n   */\n  async resolve(name) {\n    return await this.contract.resolve(name);\n  }\n\n  /**\n   * Reverse resolve an address to a name\n   * @param {string} address - Ethereum address\n   * @returns {Promise<string>} Primary name\n   */\n  async reverse(address) {\n    return await this.contract.reverse(address);\n  }\n\n  /**\n   * Check if a name exists\n   * @param {string} name - ODude name\n   * @returns {Promise<boolean>}\n   */\n  async nameExists(name) {\n    return await this.contract.nameExists(name);\n  }\n\n  /**\n   * Check if an address has a reverse record\n   * @param {string} address - Ethereum address\n   * @returns {Promise<boolean>}\n   */\n  async hasReverse(address) {\n    return await this.contract.hasReverse(address);\n  }\n\n  /**\n   * Get token ID for a name\n   * @param {string} name - ODude name\n   * @returns {Promise<bigint>}\n   */\n  async getTokenId(name) {\n    return await this.contract.getTokenId(name);\n  }\n\n  /**\n   * Get name for a token ID\n   * @param {number|string|bigint} tokenId - Token ID\n   * @returns {Promise<string>}\n   */\n  async getName(tokenId) {\n    return await this.contract.getName(tokenId);\n  }\n\n  /**\n   * Get resolution record for a name\n   * @param {string} name - ODude name\n   * @returns {Promise<Object>} Resolution record with resolvedAddress, name, tokenId, exists\n   */\n  async getResolutionRecord(name) {\n    const record = await this.contract.getResolutionRecord(name);\n    return {\n      resolvedAddress: record.resolvedAddress,\n      name: record.name,\n      tokenId: record.tokenId,\n      exists: record.exists\n    };\n  }\n\n  /**\n   * Get reverse record for an address\n   * @param {string} address - Ethereum address\n   * @returns {Promise<Object>} Reverse record with primaryName, primaryTokenId, exists\n   */\n  async getReverseRecord(address) {\n    const record = await this.contract.getReverseRecord(address);\n    return {\n      primaryName: record.primaryName,\n      primaryTokenId: record.primaryTokenId,\n      exists: record.exists\n    };\n  }\n\n  /**\n   * Get Registry contract address\n   * @returns {Promise<string>}\n   */\n  async getRegistryContract() {\n    return await this.contract.getRegistryContract();\n  }\n\n  /**\n   * Get contract owner\n   * @returns {Promise<string>}\n   */\n  async owner() {\n    return await this.contract.owner();\n  }\n\n  // ==================== Write Functions ====================\n\n  /**\n   * Set name record (only callable by Registry or owner)\n   * @param {string} name - ODude name\n   * @param {string} resolvedAddress - Address to resolve to\n   * @param {number|string|bigint} tokenId - Token ID\n   * @returns {Promise<Object>} Transaction response\n   */\n  async setNameRecord(name, resolvedAddress, tokenId) {\n    return await this.contract.setNameRecord(name, resolvedAddress, tokenId);\n  }\n\n  /**\n   * Set reverse record (only callable by Registry or owner)\n   * @param {string} addr - Ethereum address\n   * @param {string} name - ODude name\n   * @param {number|string|bigint} tokenId - Token ID\n   * @returns {Promise<Object>} Transaction response\n   */\n  async setReverse(addr, name, tokenId) {\n    return await this.contract.setReverse(addr, name, tokenId);\n  }\n\n  /**\n   * Remove name record (only callable by Registry or owner)\n   * @param {string} name - ODude name\n   * @returns {Promise<Object>} Transaction response\n   */\n  async removeNameRecord(name) {\n    return await this.contract.removeNameRecord(name);\n  }\n\n  /**\n   * Remove reverse record (only callable by Registry or owner)\n   * @param {string} address - Ethereum address\n   * @returns {Promise<Object>} Transaction response\n   */\n  async removeReverse(address) {\n    return await this.contract.removeReverse(address);\n  }\n\n  /**\n   * Set Registry contract address (only owner)\n   * @param {string} registryContract - Registry contract address\n   * @returns {Promise<Object>} Transaction response\n   */\n  async setRegistryContract(registryContract) {\n    return await this.contract.setRegistryContract(registryContract);\n  }\n\n  // ==================== Events ====================\n\n  /**\n   * Listen to NameResolved events\n   * @param {Function} callback - Callback function\n   */\n  onNameResolved(callback) {\n    this.contract.on('NameResolved', callback);\n  }\n\n  /**\n   * Listen to ReverseSet events\n   * @param {Function} callback - Callback function\n   */\n  onReverseSet(callback) {\n    this.contract.on('ReverseSet', callback);\n  }\n\n  /**\n   * Listen to ReverseRemoved events\n   * @param {Function} callback - Callback function\n   */\n  onReverseRemoved(callback) {\n    this.contract.on('ReverseRemoved', callback);\n  }\n\n  /**\n   * Remove all listeners\n   */\n  removeAllListeners() {\n    this.contract.removeAllListeners();\n  }\n\n  // ==================== Batch Operations ====================\n\n  /**\n   * Resolve multiple names to addresses\n   * @param {Array<string>} names - Array of ODude names\n   * @returns {Promise<Array<Object>>} Array of resolution results\n   */\n  async resolveMultiple(names) {\n    const promises = names.map(async (name) => {\n      try {\n        const address = await this.resolve(name);\n        return {\n          name,\n          address,\n          resolved: true\n        };\n      } catch (error) {\n        return {\n          name,\n          address: null,\n          resolved: false,\n          error: error.message\n        };\n      }\n    });\n\n    return await Promise.all(promises);\n  }\n\n  /**\n   * Reverse resolve multiple addresses to names\n   * @param {Array<string>} addresses - Array of Ethereum addresses\n   * @returns {Promise<Array<Object>>} Array of reverse resolution results\n   */\n  async reverseMultiple(addresses) {\n    const promises = addresses.map(async (address) => {\n      try {\n        const name = await this.reverse(address);\n        return {\n          address,\n          name,\n          resolved: true\n        };\n      } catch (error) {\n        return {\n          address,\n          name: null,\n          resolved: false,\n          error: error.message\n        };\n      }\n    });\n\n    return await Promise.all(promises);\n  }\n\n  /**\n   * Get resolution records for multiple names\n   * @param {Array<string>} names - Array of ODude names\n   * @returns {Promise<Array<Object>>} Array of resolution records\n   */\n  async getMultipleResolutionRecords(names) {\n    const promises = names.map(async (name) => {\n      try {\n        const record = await this.getResolutionRecord(name);\n        return {\n          name,\n          ...record\n        };\n      } catch (error) {\n        return {\n          name,\n          exists: false,\n          resolvedAddress: null,\n          error: error.message\n        };\n      }\n    });\n\n    return await Promise.all(promises);\n  }\n\n  /**\n   * Check if multiple names exist\n   * @param {Array<string>} names - Array of ODude names\n   * @returns {Promise<Array<Object>>} Array of existence results\n   */\n  async checkMultipleNamesExist(names) {\n    const promises = names.map(async (name) => {\n      try {\n        const exists = await this.nameExists(name);\n        return {\n          name,\n          exists\n        };\n      } catch (error) {\n        return {\n          name,\n          exists: false,\n          error: error.message\n        };\n      }\n    });\n\n    return await Promise.all(promises);\n  }\n}\n\nmodule.exports = Resolver;\n\n","/**\n * Custom error classes for ODude SDK\n */\n\n/**\n * Base error class for ODude SDK\n */\nclass ODudeSDKError extends Error {\n  constructor(message, code = null) {\n    super(message);\n    this.name = this.constructor.name;\n    this.code = code;\n    Error.captureStackTrace(this, this.constructor);\n  }\n}\n\n/**\n * Error thrown when a token is not found\n */\nclass TokenNotFoundError extends ODudeSDKError {\n  constructor(tokenId) {\n    super(`Token with ID ${tokenId} not found`, 'TOKEN_NOT_FOUND');\n    this.tokenId = tokenId;\n  }\n}\n\n/**\n * Error thrown when a name is not found\n */\nclass NameNotFoundError extends ODudeSDKError {\n  constructor(name) {\n    super(`Name \"${name}\" not found`, 'NAME_NOT_FOUND');\n    this.name = name;\n  }\n}\n\n/**\n * Error thrown when network-related issues occur\n */\nclass NetworkError extends ODudeSDKError {\n  constructor(message, networkName = null) {\n    super(message, 'NETWORK_ERROR');\n    this.networkName = networkName;\n  }\n}\n\n/**\n * Error thrown when configuration is invalid\n */\nclass ConfigurationError extends ODudeSDKError {\n  constructor(message) {\n    super(message, 'CONFIGURATION_ERROR');\n  }\n}\n\n/**\n * Error thrown when contract is not connected\n */\nclass ContractNotConnectedError extends ODudeSDKError {\n  constructor(contractName) {\n    super(`${contractName} contract not connected. Call connect() or connectNetwork() first.`, 'CONTRACT_NOT_CONNECTED');\n    this.contractName = contractName;\n  }\n}\n\n/**\n * Error thrown when TLD is not supported\n */\nclass UnsupportedTLDError extends ODudeSDKError {\n  constructor(tld) {\n    super(`TLD \"${tld}\" is not supported`, 'UNSUPPORTED_TLD');\n    this.tld = tld;\n  }\n}\n\n/**\n * Error thrown when domain minting fails\n */\nclass MintingError extends ODudeSDKError {\n  constructor(message, domainName = null) {\n    super(message, 'MINTING_ERROR');\n    this.domainName = domainName;\n  }\n}\n\nmodule.exports = {\n  ODudeSDKError,\n  TokenNotFoundError,\n  NameNotFoundError,\n  NetworkError,\n  ConfigurationError,\n  ContractNotConnectedError,\n  UnsupportedTLDError,\n  MintingError\n};\n","const { Contract } = require('ethers');\r\nconst TLDABI = require('../../abi/TLD.json');\r\nconst { MintingError, TokenNotFoundError } = require('../utils/errors');\r\n\r\n/**\r\n * TLD contract wrapper\r\n * Handles TLD pricing, commission, and configuration\r\n */\r\nclass TLD {\r\n  /**\r\n   * @param {string} address - Contract address\r\n   * @param {ethers.Provider|ethers.Signer} providerOrSigner - Ethers provider or signer\r\n   */\r\n  constructor(address, providerOrSigner) {\r\n    this.address = address;\r\n    this.contract = new Contract(address, TLDABI.abi, providerOrSigner);\r\n  }\r\n\r\n  // ==================== Read-only Functions ====================\r\n\r\n  /**\r\n   * Get base TLD price\r\n   * @returns {Promise<bigint>} Price in wei\r\n   */\r\n  async getBaseTLDPrice() {\r\n    return await this.contract.getBaseTLDPrice();\r\n  }\r\n\r\n  /**\r\n   * Get TLD price for a specific TLD token\r\n   * @param {number|string|bigint} tldTokenId - TLD token ID\r\n   * @returns {Promise<bigint>} Price in wei\r\n   */\r\n  async getTLDPrice(tldTokenId) {\r\n    return await this.contract.getTLDPrice(tldTokenId);\r\n  }\r\n\r\n  /**\r\n   * Get commission rate for a TLD\r\n   * @param {number|string|bigint} tldTokenId - TLD token ID\r\n   * @returns {Promise<bigint>} Commission percentage\r\n   */\r\n  async getCommission(tldTokenId) {\r\n    return await this.contract.getTLDCommission(tldTokenId);\r\n  }\r\n\r\n  /**\r\n   * Get TLD owner address\r\n   * @param {number|string|bigint} tldTokenId - TLD token ID\r\n   * @returns {Promise<string>} Owner address\r\n   */\r\n  async getTLDOwner(tldTokenId) {\r\n    return await this.contract.getTLDOwner(tldTokenId);\r\n  }\r\n\r\n\r\n\r\n  /**\r\n   * Get ERC token address for a TLD\r\n   * @param {number|string|bigint} tldTokenId - TLD token ID\r\n   * @returns {Promise<string>} ERC token address\r\n   */\r\n  async getErcToken(tldTokenId) {\r\n    return await this.contract.getErcToken(tldTokenId);\r\n  }\r\n\r\n  /**\r\n   * Get token price for a TLD\r\n   * @param {number|string|bigint} tldTokenId - TLD token ID\r\n   * @returns {Promise<bigint>} Token price in wei\r\n   */\r\n  async getTokenPrice(tldTokenId) {\r\n    return await this.contract.getTokenPrice(tldTokenId);\r\n  }\r\n\r\n  /**\r\n   * Get TLD token address for a TLD\r\n   * @param {number|string|bigint} tldTokenId - TLD token ID\r\n   * @returns {Promise<string>} TLD token address\r\n   */\r\n  async getTLDToken(tldTokenId) {\r\n    return await this.contract.getTLDToken(tldTokenId);\r\n  }\r\n\r\n  /**\r\n   * Get comprehensive TLD information\r\n   * @param {number|string|bigint} tldTokenId - TLD token ID\r\n   * @returns {Promise<Object>} TLD information\r\n   */\r\n  async getTLD(tldTokenId) {\r\n    return await this.contract.getTLD(tldTokenId);\r\n  }\r\n\r\n  /**\r\n   * Get TLD ID by name\r\n   * @param {string} tldName - TLD name\r\n   * @returns {Promise<bigint>} TLD token ID\r\n   */\r\n  async getTLDId(tldName) {\r\n    return await this.contract.getTLDId(tldName);\r\n  }\r\n\r\n  /**\r\n   * Check if TLD exists\r\n   * @param {number|string|bigint} tldTokenId - TLD token ID\r\n   * @returns {Promise<boolean>} True if TLD exists\r\n   */\r\n  async tldExists(tldTokenId) {\r\n    return await this.contract.tldExists(tldTokenId);\r\n  }\r\n\r\n  /**\r\n   * Check if a TLD exists (active)\r\n   * @param {number|string|bigint} tldTokenId - TLD token ID\r\n   * @returns {Promise<boolean>}\r\n   */\r\n  async isTLDActive(tldTokenId) {\r\n    return await this.contract.tldExists(tldTokenId);\r\n  }\r\n\r\n  /**\r\n   * Get TLD name by token ID\r\n   * @param {number|string|bigint} tldTokenId - TLD token ID\r\n   * @returns {Promise<string>}\r\n   */\r\n  async getTLDName(tldTokenId) {\r\n    return await this.contract.getTLDName(tldTokenId);\r\n  }\r\n\r\n  /**\r\n   * Get default commission rate\r\n   * @returns {Promise<bigint>}\r\n   */\r\n  async getDefaultCommission() {\r\n    return await this.contract.getDefaultCommission();\r\n  }\r\n\r\n  /**\r\n   * Get Registry contract address\r\n   * @returns {Promise<string>}\r\n   */\r\n  async getRegistryContract() {\r\n    return await this.contract.getRegistryContract();\r\n  }\r\n\r\n  /**\r\n   * Get contract owner\r\n   * @returns {Promise<string>}\r\n   */\r\n  async owner() {\r\n    return await this.contract.owner();\r\n  }\r\n\r\n  // ==================== Write Functions ====================\r\n\r\n  /**\r\n   * Set base TLD price (only owner)\r\n   * @param {bigint|string} price - Price in wei\r\n   * @returns {Promise<Object>} Transaction response\r\n   */\r\n  async setBaseTLDPrice(price) {\r\n    return await this.contract.setBaseTLDPrice(price);\r\n  }\r\n\r\n  /**\r\n   * Set TLD price for a specific TLD (only TLD owner)\r\n   * @param {number|string|bigint} tldTokenId - TLD token ID\r\n   * @param {bigint|string} price - Price in wei\r\n   * @returns {Promise<Object>} Transaction response\r\n   */\r\n  async setTLDPrice(tldTokenId, price) {\r\n    return await this.contract.setTLDPrice(tldTokenId, price);\r\n  }\r\n\r\n  /**\r\n   * Set commission for a TLD (only TLD owner)\r\n   * @param {number|string|bigint} tldTokenId - TLD token ID\r\n   * @param {number|string|bigint} commission - Commission percentage\r\n   * @returns {Promise<Object>} Transaction response\r\n   */\r\n  async setCommission(tldTokenId, commission) {\r\n    return await this.contract.setTLDCommission(tldTokenId, commission);\r\n  }\r\n\r\n\r\n\r\n  /**\r\n   * Set ERC token address for a TLD (only TLD owner)\r\n   * @param {number|string|bigint} tldTokenId - TLD token ID\r\n   * @param {string} ercAddress - ERC token address\r\n   * @returns {Promise<Object>} Transaction response\r\n   */\r\n  async setErcToken(tldTokenId, ercAddress) {\r\n    return await this.contract.setTLDToken(tldTokenId, ercAddress);\r\n  }\r\n\r\n  /**\r\n   * Set token price for a TLD (only TLD owner)\r\n   * Note: This function uses setTLDToken as the smart contract doesn't have a separate setTokenPrice method\r\n   * @param {number|string|bigint} tldTokenId - TLD token ID\r\n   * @param {bigint|string} price - Token price in wei (not used in current contract)\r\n   * @returns {Promise<Object>} Transaction response\r\n   */\r\n  async setTokenPrice(tldTokenId, price) {\r\n    // Note: The smart contract doesn't have a setTokenPrice method\r\n    // This is a placeholder that calls setTLDToken with zero address\r\n    return await this.contract.setTLDToken(tldTokenId, '0x0000000000000000000000000000000000000000');\r\n  }\r\n\r\n  /**\r\n   * Set TLD active status (only TLD owner)\r\n   * @param {number|string|bigint} tldTokenId - TLD token ID\r\n   * @param {boolean} active - Active status\r\n   * @returns {Promise<Object>} Transaction response\r\n   */\r\n  async setTLDActive(tldTokenId, active) {\r\n    return await this.contract.setTLDActive(tldTokenId, active);\r\n  }\r\n\r\n  /**\r\n   * Set default commission (only owner)\r\n   * @param {number|string|bigint} commission - Commission percentage\r\n   * @returns {Promise<Object>} Transaction response\r\n   */\r\n  async setDefaultCommission(commission) {\r\n    return await this.contract.setDefaultCommission(commission);\r\n  }\r\n\r\n  /**\r\n   * Set Registry contract address (only owner)\r\n   * @param {string} registryContract - Registry contract address\r\n   * @returns {Promise<Object>} Transaction response\r\n   */\r\n  async setRegistryContract(registryContract) {\r\n    return await this.contract.setRegistryContract(registryContract);\r\n  }\r\n\r\n  /**\r\n   * Register a new TLD configuration (called by Registry)\r\n   * @param {number|string|bigint} tldTokenId - TLD token ID\r\n   * @param {string} tldName - TLD name\r\n   * @param {string} owner - TLD owner address\r\n   * @returns {Promise<Object>} Transaction response\r\n   */\r\n  async registerTLD(tldTokenId, tldName, owner) {\r\n    return await this.contract.registerTLD(tldTokenId, tldName, owner);\r\n  }\r\n\r\n  // ==================== Domain Minting Functions ====================\r\n\r\n  /**\r\n   * Mint a domain under a TLD\r\n   * Note: This method requires a Registry contract instance to perform the actual minting\r\n   * @param {string} domainName - Full domain name (e.g., \"alice@fil\")\r\n   * @param {string} toAddress - Address to mint the domain to\r\n   * @param {Object} options - Minting options\r\n   * @param {bigint|string} options.value - ETH value to send (for payment)\r\n   * @param {number} options.gasLimit - Gas limit (optional)\r\n   * @param {Object} registryContract - Registry contract instance (required for minting)\r\n   * @returns {Promise<Object>} Transaction response\r\n   * @throws {MintingError} When minting fails\r\n   */\r\n  async mintDomain(domainName, toAddress, options = {}, registryContract = null) {\r\n    try {\r\n      if (!domainName || typeof domainName !== 'string') {\r\n        throw new MintingError('Invalid domain name provided', domainName);\r\n      }\r\n\r\n      if (!toAddress || typeof toAddress !== 'string') {\r\n        throw new MintingError('Invalid address provided', domainName);\r\n      }\r\n\r\n      if (!registryContract) {\r\n        throw new MintingError('Registry contract is required for domain minting', domainName);\r\n      }\r\n\r\n      // Check eligibility first\r\n      const eligibility = await this.checkMintEligibility(domainName);\r\n      if (!eligibility.eligible) {\r\n        throw new MintingError(`Domain not eligible for minting: ${eligibility.reason}`, domainName);\r\n      }\r\n\r\n      // Generate a token ID for the domain\r\n      // Use a hash-based approach to generate a unique token ID\r\n      const { keccak256, toUtf8Bytes } = require('ethers');\r\n      const tokenId = BigInt(keccak256(toUtf8Bytes(domainName))) % (2n ** 256n);\r\n\r\n      // Create a basic metadata URI (this could be enhanced)\r\n      const tokenUri = `https://metadata.odude.com/${domainName}`;\r\n\r\n      const txOptions = {};\r\n\r\n      if (options.value) {\r\n        txOptions.value = options.value;\r\n      }\r\n\r\n      if (options.gasLimit) {\r\n        txOptions.gasLimit = options.gasLimit;\r\n      }\r\n\r\n      // Use Registry contract to mint the domain\r\n      return await registryContract.mintDomain(tokenId, domainName, tokenUri, toAddress, txOptions);\r\n    } catch (error) {\r\n      if (error instanceof MintingError) {\r\n        throw error;\r\n      }\r\n      throw new MintingError(`Failed to mint domain: ${error.message}`, domainName);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Estimate the cost to mint a domain\r\n   * @param {string} domainName - Full domain name (e.g., \"alice@fil\")\r\n   * @returns {Promise<bigint>} Estimated cost in wei\r\n   */\r\n  async estimateMintCost(domainName) {\r\n    // Since the smart contract doesn't have estimateMintCost, we'll get the TLD price\r\n    try {\r\n      const tld = domainName.split('@').pop();\r\n      const tldTokenId = await this.contract.getTLDId(tld);\r\n      return await this.contract.getTLDPrice(tldTokenId);\r\n    } catch (error) {\r\n      throw new Error(`Failed to estimate mint cost for ${domainName}: ${error.message}`);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Check if a domain is eligible for minting\r\n   * @param {string} domainName - Full domain name (e.g., \"alice@fil\")\r\n   * @param {Object} resolverContract - Resolver contract instance\r\n   * @returns {Promise<Object>} Eligibility information\r\n   */\r\n  async checkMintEligibility(domainName, resolverContract = null) {\r\n    try {\r\n      const tld = domainName.split('@').pop();\r\n\r\n      // Check if this is a TLD minting (no @ symbol) or subdomain minting\r\n      const isTLDMinting = !domainName.includes('@');\r\n\r\n      if (isTLDMinting) {\r\n        // For TLD minting, check base TLD price and availability\r\n        const baseTLDPrice = await this.contract.getBaseTLDPrice();\r\n\r\n        // Check if TLD already exists\r\n        let tldExists = false;\r\n        try {\r\n          const tldTokenId = await this.contract.getTLDId(domainName);\r\n          tldExists = await this.contract.tldExists(tldTokenId);\r\n        } catch (error) {\r\n          // TLD doesn't exist yet, which is good for minting\r\n          tldExists = false;\r\n        }\r\n\r\n        return {\r\n          eligible: !tldExists,\r\n          available: !tldExists,\r\n          tldActive: true, // Not applicable for TLD minting\r\n          cost: baseTLDPrice,\r\n          reason: tldExists ? 'TLD already exists' : 'Eligible for TLD minting'\r\n        };\r\n      } else {\r\n        // For subdomain minting, use existing logic\r\n        const tldTokenId = await this.contract.getTLDId(tld);\r\n\r\n        const [isAvailable, tldActive, tldPrice] = await Promise.all([\r\n          resolverContract ? !await resolverContract.nameExists(domainName) : true,\r\n          this.contract.tldExists(tldTokenId),\r\n          this.contract.getTLDPrice(tldTokenId)\r\n        ]);\r\n\r\n        return {\r\n          eligible: isAvailable && tldActive,\r\n          available: isAvailable,\r\n          tldActive: tldActive,\r\n          cost: tldPrice,\r\n          reason: !isAvailable ? 'Domain already taken' :\r\n                  !tldActive ? 'TLD not active' :\r\n                  'Eligible for minting'\r\n        };\r\n      }\r\n    } catch (error) {\r\n      return {\r\n        eligible: false,\r\n        available: false,\r\n        tldActive: false,\r\n        cost: 0n,\r\n        reason: 'Error checking eligibility: ' + error.message\r\n      };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Check if TLD is active for a domain\r\n   * @private\r\n   * @param {string} domainName - Full domain name\r\n   * @returns {Promise<boolean>} True if TLD is active\r\n   */\r\n  async _checkTLDActive(domainName) {\r\n    try {\r\n      const tld = domainName.split('@').pop();\r\n      const tldTokenId = await this.contract.getTLDId(tld);\r\n      return await this.contract.tldExists(tldTokenId);\r\n    } catch (error) {\r\n      return false;\r\n    }\r\n  }\r\n\r\n  // ==================== Events ====================\r\n\r\n  /**\r\n   * Listen to TLDPriceSet events\r\n   * @param {Function} callback - Callback function\r\n   */\r\n  onTLDPriceSet(callback) {\r\n    this.contract.on('TLDPriceSet', callback);\r\n  }\r\n\r\n  /**\r\n   * Listen to CommissionSet events\r\n   * @param {Function} callback - Callback function\r\n   */\r\n  onCommissionSet(callback) {\r\n    this.contract.on('CommissionSet', callback);\r\n  }\r\n\r\n  /**\r\n   * Listen to TLDActiveSet events\r\n   * @param {Function} callback - Callback function\r\n   */\r\n  onTLDActiveSet(callback) {\r\n    this.contract.on('TLDActiveSet', callback);\r\n  }\r\n\r\n  /**\r\n   * Remove all listeners\r\n   */\r\n  removeAllListeners() {\r\n    this.contract.removeAllListeners();\r\n  }\r\n}\r\n\r\nmodule.exports = TLD;\r\n\r\n","const { Contract } = require('ethers');\nconst RWAirdropABI = require('../../abi/RWAirdrop.json');\n\n/**\n * RWAirdrop contract wrapper\n * Handles airdrop claims and management\n */\nclass RWAirdrop {\n  /**\n   * @param {string} address - Contract address\n   * @param {ethers.Provider|ethers.Signer} providerOrSigner - Ethers provider or signer\n   */\n  constructor(address, providerOrSigner) {\n    this.address = address;\n    this.contract = new Contract(address, RWAirdropABI.abi, providerOrSigner);\n  }\n\n  // ==================== Read-only Functions ====================\n\n  /**\n   * Get claimable airdrops for a user\n   * @param {string} user - User address\n   * @returns {Promise<Array>} Array of claimable airdrops\n   */\n  async getClaimableAirdrops(user) {\n    return await this.contract.getClaimableAirdrops(user);\n  }\n\n  /**\n   * Get domain claimed amount for a specific airdrop\n   * @param {string} odudeName - ODude name\n   * @param {number|string|bigint} airdropId - Airdrop ID\n   * @returns {Promise<bigint>} Claimed amount\n   */\n  async getDomainClaimedAmount(odudeName, airdropId) {\n    return await this.contract.getDomainClaimedAmount(odudeName, airdropId);\n  }\n\n  /**\n   * Get remaining airdrop amount for a TLD and airdrop ID\n   * @param {string} tldName - TLD name\n   * @param {number|string|bigint} airdropId - Airdrop ID\n   * @returns {Promise<bigint>} Remaining amount\n   */\n  async getRemainingAirdrop(tldName, airdropId) {\n    return await this.contract.getRemainingAirdrop(tldName, airdropId);\n  }\n\n  /**\n   * Get user domains in a TLD\n   * @param {string} user - User address\n   * @param {string} tldName - TLD name\n   * @returns {Promise<Array<string>>} Array of domain names\n   */\n  async getUserDomainsInTLD(user, tldName) {\n    return await this.contract.getUserDomainsInTLD(user, tldName);\n  }\n\n  /**\n   * Check if a domain has claimed from a specific airdrop\n   * @param {string} odudeName - ODude name\n   * @param {number|string|bigint} airdropId - Airdrop ID\n   * @returns {Promise<boolean>} Whether domain has claimed\n   */\n  async hasDomainClaimed(odudeName, airdropId) {\n    return await this.contract.hasDomainClaimed(odudeName, airdropId);\n  }\n\n  /**\n   * Check if airdrop is active for a specific TLD and airdrop ID\n   * @param {string} tldName - TLD name\n   * @param {number|string|bigint} airdropId - Airdrop ID\n   * @returns {Promise<boolean>}\n   */\n  async isAirdropActive(tldName, airdropId) {\n    const airdropInfo = await this.contract.getAirdropInfo(tldName, airdropId);\n    return airdropInfo.isActive;\n  }\n\n  /**\n   * Get contract owner\n   * @returns {Promise<string>}\n   */\n  async owner() {\n    return await this.contract.owner();\n  }\n\n  /**\n   * Get TLD airdrop count\n   * @param {string} tldName - TLD name\n   * @returns {Promise<bigint>}\n   */\n  async getTLDAirdropCount(tldName) {\n    return await this.contract.getTLDAirdropCount(tldName);\n  }\n\n  /**\n   * Get TLD airdrop IDs\n   * @param {string} tldName - TLD name\n   * @returns {Promise<Array<bigint>>}\n   */\n  async getTLDAirdropIds(tldName) {\n    return await this.contract.getTLDAirdropIds(tldName);\n  }\n\n  /**\n   * Get airdrop info for a specific TLD and airdrop ID\n   * @param {string} tldName - TLD name\n   * @param {number|string|bigint} airdropId - Airdrop ID\n   * @returns {Promise<Object>} Airdrop info\n   */\n  async getAirdropInfoByTLD(tldName, airdropId) {\n    return await this.contract.getAirdropInfo(tldName, airdropId);\n  }\n\n  // ==================== Write Functions ====================\n\n  /**\n   * Claim share from airdrop\n   * @param {string} tldName - TLD name\n   * @param {number|string|bigint} airdropId - Airdrop ID\n   * @param {string} odudeName - ODude name\n   * @param {Object} options - Transaction options\n   * @returns {Promise<Object>} Transaction response\n   */\n  async claimShare(tldName, airdropId, odudeName, options = {}) {\n    return await this.contract.claimShare(tldName, airdropId, odudeName, options);\n  }\n\n  /**\n   * Create airdrop (only TLD owner)\n   * @param {string} tldName - TLD name\n   * @param {string} tokenAddress - Token address\n   * @param {bigint|string} totalAmount - Total amount\n   * @param {bigint|string} perUserShare - Per user share\n   * @param {Object} options - Transaction options\n   * @returns {Promise<Object>} Transaction response\n   */\n  async createAirdrop(tldName, tokenAddress, totalAmount, perUserShare, options = {}) {\n    return await this.contract.createAirdrop(tldName, tokenAddress, totalAmount, perUserShare, options);\n  }\n\n  /**\n   * Withdraw airdrop (only TLD owner)\n   * @param {string} tldName - TLD name\n   * @param {number|string|bigint} airdropId - Airdrop ID\n   * @param {Object} options - Transaction options\n   * @returns {Promise<Object>} Transaction response\n   */\n  async withdrawAirdrop(tldName, airdropId, options = {}) {\n    return await this.contract.withdrawAirdrop(tldName, airdropId, options);\n  }\n\n  /**\n   * Sync domain ownership (batch)\n   * @param {Array<string>} odudeNames - Array of ODude names\n   * @param {Array<string>} owners - Array of owner addresses\n   * @param {Object} options - Transaction options\n   * @returns {Promise<Object>} Transaction response\n   */\n  async batchSyncDomainOwnership(odudeNames, owners, options = {}) {\n    return await this.contract.batchSyncDomainOwnership(odudeNames, owners, options);\n  }\n\n  /**\n   * Sync single domain ownership\n   * @param {string} odudeName - ODude name\n   * @param {string} owner - Owner address\n   * @param {Object} options - Transaction options\n   * @returns {Promise<Object>} Transaction response\n   */\n  async syncDomainOwnership(odudeName, owner, options = {}) {\n    return await this.contract.syncDomainOwnership(odudeName, owner, options);\n  }\n\n  // ==================== Events ====================\n\n  /**\n   * Listen to Claimed events\n   * @param {Function} callback - Callback function\n   */\n  onClaimed(callback) {\n    this.contract.on('Claimed', callback);\n  }\n\n  /**\n   * Listen to AirdropActiveSet events\n   * @param {Function} callback - Callback function\n   */\n  onAirdropActiveSet(callback) {\n    this.contract.on('AirdropActiveSet', callback);\n  }\n\n  /**\n   * Listen to EligibleAddressAdded events\n   * @param {Function} callback - Callback function\n   */\n  onEligibleAddressAdded(callback) {\n    this.contract.on('EligibleAddressAdded', callback);\n  }\n\n  /**\n   * Remove all listeners\n   */\n  removeAllListeners() {\n    this.contract.removeAllListeners();\n  }\n\n  // ==================== Helper Functions ====================\n\n  /**\n   * Get comprehensive airdrop info for a TLD and airdrop ID\n   * @param {string} tldName - TLD name\n   * @param {number|string|bigint} airdropId - Airdrop ID\n   * @returns {Promise<Object>} Airdrop info\n   */\n  async getAirdropDetails(tldName, airdropId) {\n    return await this.getAirdropInfoByTLD(tldName, airdropId);\n  }\n}\n\nmodule.exports = RWAirdrop;\n\n","/**\n * Helper utilities for ODude SDK\n */\n\n/**\n * Normalize ODude name to lowercase\n * @param {string} name - The ODude name\n * @returns {string} Normalized name\n */\nfunction normalizeName(name) {\n  if (!name || typeof name !== 'string') {\n    throw new Error('Invalid name: must be a non-empty string');\n  }\n  return name.toLowerCase().trim();\n}\n\n/**\n * Extract TLD from a full ODude name\n * @param {string} name - Full ODude name (e.g., \"alice@crypto\" or \"bob@alice@crypto\")\n * @returns {string} The TLD portion\n */\nfunction extractTLD(name) {\n  const normalized = normalizeName(name);\n  const parts = normalized.split('@');\n  if (parts.length === 0) {\n    throw new Error('Invalid name format');\n  }\n  return parts[parts.length - 1];\n}\n\n/**\n * Extract subdomain from a full ODude name\n * @param {string} name - Full ODude name (e.g., \"alice.odude\")\n * @returns {string|null} The subdomain portion or null if it's a TLD\n */\nfunction extractSubdomain(name) {\n  const normalized = normalizeName(name);\n  const parts = normalized.split('.');\n  if (parts.length <= 1) {\n    return null;\n  }\n  return parts.slice(0, -1).join('.');\n}\n\n/**\n * Check if a name is a TLD (single part)\n * @param {string} name - The ODude name\n * @returns {boolean} True if it's a TLD\n */\nfunction isTLD(name) {\n  const normalized = normalizeName(name);\n  return !normalized.includes('.');\n}\n\n/**\n * Check if a name is a subdomain (multiple parts)\n * @param {string} name - The ODude name\n * @returns {boolean} True if it's a subdomain\n */\nfunction isSubdomain(name) {\n  return !isTLD(name);\n}\n\n/**\n * Parse a full ODude name into components\n * @param {string} name - Full ODude name\n * @returns {Object} Object with tld, subdomain, and parts\n */\nfunction parseName(name) {\n  const normalized = normalizeName(name);\n  const parts = normalized.split('@');\n  \n  return {\n    full: normalized,\n    tld: parts[parts.length - 1],\n    subdomain: parts.length > 1 ? parts.slice(0, -1).join('@') : null,\n    parts: parts,\n    isTLD: parts.length === 1,\n    isSubdomain: parts.length > 1\n  };\n}\n\n/**\n * Validate Ethereum address\n * @param {string} address - Ethereum address\n * @returns {boolean} True if valid\n */\nfunction isValidAddress(address) {\n  return /^0x[a-fA-F0-9]{40}$/.test(address);\n}\n\n/**\n * Format token ID to string\n * @param {*} tokenId - Token ID (can be BigInt, number, or string)\n * @returns {string} Formatted token ID\n */\nfunction formatTokenId(tokenId) {\n  if (typeof tokenId === 'bigint') {\n    return tokenId.toString();\n  }\n  if (typeof tokenId === 'number') {\n    return tokenId.toString();\n  }\n  return String(tokenId);\n}\n\n/**\n * Format ether value to wei\n * @param {string|number} ether - Ether value\n * @returns {bigint} Wei value\n */\nfunction parseEther(ether) {\n  const { parseEther: ethersParseEther } = require('ethers');\n  return ethersParseEther(String(ether));\n}\n\n/**\n * Format wei value to ether\n * @param {bigint|string} wei - Wei value\n * @returns {string} Ether value\n */\nfunction formatEther(wei) {\n  const { formatEther: ethersFormatEther } = require('ethers');\n  return ethersFormatEther(wei);\n}\n\n/**\n * Generate a random 10-digit token ID\n * @returns {number} Random 10-digit number\n */\nfunction randomTokenId() {\n  // Generate a random number between 1000000000 and 9999999999 (10 digits)\n  return Math.floor(Math.random() * 9000000000) + 1000000000;\n}\n\n/**\n * Validate if a sub-name is valid according to ODude naming rules\n * @param {string} domainName - The domain name to validate (e.g., \"test@sepolia\")\n * @returns {boolean} True if the sub-name is valid\n */\nfunction isValidSubName(domainName) {\n  if (!domainName || typeof domainName !== 'string') {\n    return false;\n  }\n\n  // Count @ symbols - should have exactly 1 for sub-names\n  const atCount = (domainName.match(/@/g) || []).length;\n  if (atCount !== 1) return false;\n\n  // Regular expressions for validation\n  const validFormatRegex = /^[a-z\\d]([a-z\\d.]*[a-z\\d])?(@[a-z\\d]([a-z\\d.]*[a-z\\d])?)*$/i;\n  const maxLengthRegex = /^.{1,253}$/;\n  const segmentLengthRegex = /^[^@]{1,63}(@[^@]{1,63})*$/;\n\n  // Validate the domain name\n  return validFormatRegex.test(domainName) &&\n         maxLengthRegex.test(domainName) &&\n         segmentLengthRegex.test(domainName);\n}\n\n/**\n * Validate if a TLD name is valid according to ODude naming rules\n * @param {string} tldName - The TLD name to validate (e.g., \"crypto\", \"sepolia\")\n * @returns {boolean} True if the TLD name is valid\n */\nfunction isValidTLD(tldName) {\n  if (!tldName || typeof tldName !== 'string') {\n    return false;\n  }\n\n  // TLD should not contain @ symbols\n  if (tldName.includes('@')) return false;\n\n  // Regular expressions for TLD validation\n  const validFormatRegex = /^[a-z\\d]([a-z\\d.]*[a-z\\d])?$/i;\n  const maxLengthRegex = /^.{1,63}$/; // TLD max length is 63 characters\n  const minLengthRegex = /^.{2,}$/; // TLD min length is 2 characters\n\n  // Validate the TLD name\n  return validFormatRegex.test(tldName) &&\n         maxLengthRegex.test(tldName) &&\n         minLengthRegex.test(tldName);\n}\n\nmodule.exports = {\n  normalizeName,\n  extractTLD,\n  extractSubdomain,\n  isTLD,\n  isSubdomain,\n  parseName,\n  isValidAddress,\n  formatTokenId,\n  parseEther,\n  formatEther,\n  randomTokenId,\n  isValidSubName,\n  isValidTLD\n};\n\n","const { JsonRpcProvider, Wallet, Network } = require('ethers');\nconst Registry = require('./contracts/Registry');\nconst Resolver = require('./contracts/Resolver');\nconst TLD = require('./contracts/TLD');\nconst RWAirdrop = require('./contracts/RWAirdrop');\nconst helpers = require('./utils/helpers');\nconst {\n  NetworkError,\n  ConfigurationError,\n  ContractNotConnectedError,\n  UnsupportedTLDError,\n  NameNotFoundError\n} = require('./utils/errors');\n\n/**\n * Custom JsonRpcProvider with limited retries\n */\nclass LimitedRetryJsonRpcProvider extends JsonRpcProvider {\n  constructor(url, network, options = {}) {\n    super(url, network, options);\n    this.maxRetries = options.maxRetries || 3;\n    this.retryCount = 0;\n    this.skipNetworkDetection = options.skipNetworkDetection || false;\n    this.expectedChainId = options.expectedChainId || null;\n  }\n\n  async _detectNetwork() {\n    // Skip network detection if requested and use expected chain ID\n    if (this.skipNetworkDetection && this.expectedChainId) {\n      return new Network('unknown', this.expectedChainId);\n    }\n\n    if (this.retryCount >= this.maxRetries) {\n      console.warn(`Failed to detect network after ${this.maxRetries} attempts for URL: ${this._getConnection().url}. Continuing with expected or default network.`);\n      return new Network('unknown', this.expectedChainId || 1);\n    }\n\n    try {\n      this.retryCount++;\n      return await super._detectNetwork();\n    } catch (error) {\n      if (this.retryCount >= this.maxRetries) {\n        console.warn(`Network detection failed after ${this.maxRetries} attempts: ${error.message}. Continuing with expected or default network.`);\n        return new Network('unknown', this.expectedChainId || 1);\n      }\n      throw error;\n    }\n  }\n}\n\n/**\n * Main ODude SDK class\n * Provides easy access to all ODude contracts\n */\nclass ODudeSDK {\n  /**\n   * @param {Object} config - Configuration object\n   * @param {string} config.rpcUrl - Single RPC URL (legacy, optional if provider is provided)\n   * @param {string} config.rpcUrl_filecoin - Filecoin RPC URL (optional)\n   * @param {string} config.rpcUrl_bnb - BNB Smart Chain RPC URL (optional)\n   * @param {string} config.rpcUrl_sepolia - Base Sepolia RPC URL (optional)\n   * @param {ethers.Provider} config.provider - Ethers provider (optional)\n   * @param {ethers.Signer} config.signer - Ethers signer (optional)\n   * @param {string} config.privateKey - Private key for signing (optional)\n   * @param {Object} config.addresses - Contract addresses (optional, will use network config if not provided)\n   */\n  constructor(config = {}) {\n    this.config = config;\n    this.providers = {};\n    this.signers = {};\n    this.contracts = {};\n    this.networkConfig = null;\n    this.currentNetwork = null;\n\n    this._loadNetworkConfig();\n    this._validateConfiguration();\n    this._initializeProviders();\n  }\n\n  /**\n   * Load network configuration from config file\n   * @private\n   */\n  _loadNetworkConfig() {\n    try {\n      this.networkConfig = require('../config/networks.json');\n    } catch (error) {\n      throw new ConfigurationError('Failed to load network configuration: ' + error.message);\n    }\n  }\n\n  /**\n   * Validate the provided configuration\n   * @private\n   */\n  _validateConfiguration() {\n    const errors = [];\n    const warnings = [];\n\n    // Check if multi-network RPC URLs are provided correctly\n    const networkRpcUrls = {\n      filecoin: this.config.rpcUrl_filecoin,\n      bnb: this.config.rpcUrl_bnb,\n      sepolia: this.config.rpcUrl_sepolia\n    };\n\n    // Validate that if any network-specific RPC URL is provided, it's a valid URL\n    for (const [network, url] of Object.entries(networkRpcUrls)) {\n      if (url && typeof url !== 'string') {\n        errors.push(`Invalid RPC URL for ${network}: must be a string`);\n      } else if (url && !this._isValidUrl(url)) {\n        warnings.push(`RPC URL for ${network} may be invalid: ${url}`);\n      }\n    }\n\n    // Check for legacy rpcUrl\n    if (this.config.rpcUrl && typeof this.config.rpcUrl !== 'string') {\n      errors.push('Invalid rpcUrl: must be a string');\n    } else if (this.config.rpcUrl && !this._isValidUrl(this.config.rpcUrl)) {\n      warnings.push(`Legacy rpcUrl may be invalid: ${this.config.rpcUrl}`);\n    }\n\n    // Check private key format if provided\n    if (this.config.privateKey) {\n      if (typeof this.config.privateKey !== 'string') {\n        errors.push('Invalid privateKey: must be a string');\n      } else if (!this.config.privateKey.startsWith('0x') && this.config.privateKey.length !== 64 && this.config.privateKey.length !== 66) {\n        warnings.push('Private key format may be invalid (should be 64 hex characters or start with 0x)');\n      }\n    }\n\n    // Log warnings\n    if (warnings.length > 0) {\n      console.warn('⚠️  ODude SDK Configuration Warnings:');\n      warnings.forEach(warning => console.warn(`   - ${warning}`));\n    }\n\n    // Throw errors\n    if (errors.length > 0) {\n      console.error('❌ ODude SDK Configuration Errors:');\n      errors.forEach(error => console.error(`   - ${error}`));\n      throw new ConfigurationError(`Configuration validation failed: ${errors.join(', ')}`);\n    }\n\n    // Log successful configuration\n    const configuredNetworks = Object.entries(networkRpcUrls)\n      .filter(([, url]) => url)\n      .map(([network]) => network);\n\n    if (configuredNetworks.length > 0) {\n      console.log('✅ ODude SDK initialized with networks:', configuredNetworks.join(', '));\n    } else if (this.config.rpcUrl) {\n      console.log('✅ ODude SDK initialized with legacy RPC URL');\n    } else {\n      console.log('✅ ODude SDK initialized with default network configurations');\n    }\n  }\n\n  /**\n   * Check if a URL is valid\n   * @private\n   * @param {string} url - URL to validate\n   * @returns {boolean}\n   */\n  _isValidUrl(url) {\n    try {\n      new URL(url);\n      return true;\n    } catch {\n      return false;\n    }\n  }\n\n  /**\n   * Initialize providers for all networks\n   * @private\n   */\n  _initializeProviders() {\n    // Handle legacy single provider/signer configuration\n    if (this.config.provider) {\n      this.providers.default = this.config.provider;\n      return;\n    }\n\n    if (this.config.signer) {\n      this.signers.default = this.config.signer;\n      this.providers.default = this.config.signer.provider;\n      return;\n    }\n\n    // Initialize providers for each network\n    for (const [networkName, networkInfo] of Object.entries(this.networkConfig.networks)) {\n      const rpcUrl = this._getRpcUrlForNetwork(networkName);\n      if (rpcUrl) {\n        try {\n          // Skip network detection for external networks to avoid connection issues\n          const skipDetection = !rpcUrl.includes('127.0.0.1') && !rpcUrl.includes('localhost');\n          this.providers[networkName] = new LimitedRetryJsonRpcProvider(rpcUrl, null, {\n            maxRetries: 3,\n            skipNetworkDetection: skipDetection,\n            expectedChainId: networkInfo.chainId\n          });\n\n          // Create signer if private key is provided\n          if (this.config.privateKey) {\n            this.signers[networkName] = new Wallet(this.config.privateKey, this.providers[networkName]);\n          }\n        } catch (error) {\n          console.warn(`Failed to initialize provider for ${networkName}: ${error.message}`);\n        }\n      }\n    }\n\n    // Fallback to localhost if no providers were created\n    if (Object.keys(this.providers).length === 0) {\n      try {\n        this.providers.localhost = new LimitedRetryJsonRpcProvider('http://127.0.0.1:8545', null, { maxRetries: 3 });\n        if (this.config.privateKey) {\n          this.signers.localhost = new Wallet(this.config.privateKey, this.providers.localhost);\n        }\n      } catch (error) {\n        console.warn(`Failed to initialize localhost provider: ${error.message}`);\n      }\n    }\n  }\n\n  /**\n   * Get RPC URL for a specific network\n   * @private\n   * @param {string} networkName - Network name\n   * @returns {string|null} RPC URL\n   */\n  _getRpcUrlForNetwork(networkName) {\n    const networkInfo = this.networkConfig.networks[networkName];\n    if (!networkInfo) return null;\n\n    // Check for environment variable first\n    if (networkInfo.rpcUrlEnvVar && process.env[networkInfo.rpcUrlEnvVar]) {\n      return process.env[networkInfo.rpcUrlEnvVar];\n    }\n\n    // Check for config-specific RPC URLs\n    const configKey = `rpcUrl_${networkName}`;\n    if (this.config[configKey]) {\n      return this.config[configKey];\n    }\n\n    // Special handling for legacy config keys\n    if (networkName === 'basesepolia' && this.config.rpcUrl_sepolia) {\n      return this.config.rpcUrl_sepolia;\n    }\n\n    // Check for legacy single rpcUrl\n    if (this.config.rpcUrl && networkName === 'localhost') {\n      return this.config.rpcUrl;\n    }\n\n    // Use default RPC URL\n    return networkInfo.defaultRpcUrl;\n  }\n\n  /**\n   * Determine network based on TLD\n   * @param {string} tld - Top-level domain\n   * @returns {string} Network name\n   */\n  getNetworkForTLD(tld) {\n    const tldLower = tld.toLowerCase();\n\n    // Check if it's already a network name\n    if (this.networkConfig.networks[tldLower]) {\n      return tldLower;\n    }\n\n    // Check TLD mappings\n    if (this.networkConfig.tldMappings[tldLower]) {\n      return this.networkConfig.tldMappings[tldLower];\n    }\n\n    // Return default network\n    return this.networkConfig.defaultNetwork;\n  }\n\n  /**\n   * Get provider for a specific network or TLD\n   * @param {string} networkOrTld - Network name or TLD\n   * @returns {ethers.Provider} Provider instance\n   */\n  getProvider(networkOrTld = null) {\n    if (!networkOrTld) {\n      // Return default provider\n      if (this.providers.default) return this.providers.default;\n      if (this.currentNetwork && this.providers[this.currentNetwork]) {\n        return this.providers[this.currentNetwork];\n      }\n      // Return first available provider\n      const firstNetwork = Object.keys(this.providers)[0];\n      return this.providers[firstNetwork];\n    }\n\n    // Check if it's a network name\n    if (this.providers[networkOrTld]) {\n      return this.providers[networkOrTld];\n    }\n\n    // Treat as TLD and find corresponding network\n    const network = this.getNetworkForTLD(networkOrTld);\n    if (this.providers[network]) {\n      return this.providers[network];\n    }\n\n    throw new NetworkError(`No provider available for network/TLD: ${networkOrTld}`);\n  }\n\n  /**\n   * Get signer for a specific network or TLD\n   * @param {string} networkOrTld - Network name or TLD\n   * @returns {ethers.Signer|null} Signer instance\n   */\n  getSigner(networkOrTld = null) {\n    if (!networkOrTld) {\n      // Return default signer\n      if (this.signers.default) return this.signers.default;\n      if (this.currentNetwork && this.signers[this.currentNetwork]) {\n        return this.signers[this.currentNetwork];\n      }\n      // Return first available signer\n      const firstNetwork = Object.keys(this.signers)[0];\n      return this.signers[firstNetwork] || null;\n    }\n\n    // Check if it's a network name\n    if (this.signers[networkOrTld]) {\n      return this.signers[networkOrTld];\n    }\n\n    // Treat as TLD and find corresponding network\n    const network = this.getNetworkForTLD(networkOrTld);\n    if (this.signers[network]) {\n      return this.signers[network];\n    }\n\n    return null;\n  }\n\n  /**\n   * Connect contracts with addresses for a specific network\n   * @param {Object} addresses - Contract addresses\n   * @param {string} addresses.Registry - Registry contract address\n   * @param {string} addresses.Resolver - Resolver contract address\n   * @param {string} addresses.TLD - TLD contract address\n   * @param {string} addresses.RWAirdrop - RWAirdrop contract address\n   * @param {string} network - Network name (optional, uses current or default)\n   */\n  connect(addresses, network = null) {\n    const targetNetwork = network || this.currentNetwork || this.networkConfig.defaultNetwork;\n    const providerOrSigner = this.getSigner(targetNetwork) || this.getProvider(targetNetwork);\n\n    if (!this.contracts[targetNetwork]) {\n      this.contracts[targetNetwork] = {};\n    }\n\n    if (addresses.Registry) {\n      this.contracts[targetNetwork].registry = new Registry(addresses.Registry, providerOrSigner);\n    }\n\n    if (addresses.Resolver) {\n      this.contracts[targetNetwork].resolver = new Resolver(addresses.Resolver, providerOrSigner);\n    }\n\n    if (addresses.TLD) {\n      this.contracts[targetNetwork].tld = new TLD(addresses.TLD, providerOrSigner);\n    }\n\n    if (addresses.RWAirdrop) {\n      this.contracts[targetNetwork].rwairdrop = new RWAirdrop(addresses.RWAirdrop, providerOrSigner);\n    }\n\n    // Set as current network if not already set\n    if (!this.currentNetwork) {\n      this.currentNetwork = targetNetwork;\n    }\n  }\n\n  /**\n   * Connect to localhost deployment\n   * Reads addresses from localhost-deployment.json\n   */\n  connectLocalhost() {\n    try {\n      const deployment = require('../localhost-deployment.json');\n      const addresses = {\n        Registry: deployment.contracts.Registry.address,\n        Resolver: deployment.contracts.Resolver.address,\n        TLD: deployment.contracts.TLD.address,\n        RWAirdrop: deployment.contracts.RWAirdrop.address\n      };\n      this.connect(addresses, 'localhost');\n    } catch (error) {\n      throw new NetworkError('Failed to load localhost-deployment.json: ' + error.message, 'localhost');\n    }\n  }\n\n  /**\n   * Connect to a network using config file\n   * @param {string} network - Network name ('localhost', 'filecoin', 'bnb', 'basesepolia')\n   */\n  connectNetwork(network = null) {\n    try {\n      const targetNetwork = network || this.networkConfig.defaultNetwork;\n\n      if (!this.networkConfig.networks[targetNetwork]) {\n        throw new NetworkError(`Network \"${targetNetwork}\" not found in config`, targetNetwork);\n      }\n\n      const networkInfo = this.networkConfig.networks[targetNetwork];\n\n      // Ensure provider exists for this network\n      if (!this.providers[targetNetwork]) {\n        const rpcUrl = this._getRpcUrlForNetwork(targetNetwork);\n        if (!rpcUrl) {\n          throw new NetworkError(`No RPC URL available for network \"${targetNetwork}\"`, targetNetwork);\n        }\n        const skipDetection = !rpcUrl.includes('127.0.0.1') && !rpcUrl.includes('localhost');\n        this.providers[targetNetwork] = new LimitedRetryJsonRpcProvider(rpcUrl, null, {\n          maxRetries: 3,\n          skipNetworkDetection: skipDetection,\n          expectedChainId: networkInfo.chainId\n        });\n\n        if (this.config.privateKey) {\n          this.signers[targetNetwork] = new Wallet(this.config.privateKey, this.providers[targetNetwork]);\n        }\n      }\n\n      this.connect(networkInfo.contracts, targetNetwork);\n      this.currentNetwork = targetNetwork;\n    } catch (error) {\n      if (error instanceof NetworkError) {\n        throw error;\n      }\n      throw new NetworkError('Failed to connect to network: ' + error.message, network);\n    }\n  }\n\n  /**\n   * Connect to all configured networks\n   */\n  connectAllNetworks() {\n    const connectedNetworks = [];\n\n    for (const networkName of Object.keys(this.networkConfig.networks)) {\n      try {\n        this.connectNetwork(networkName);\n        connectedNetworks.push(networkName);\n      } catch (error) {\n        console.warn(`Failed to connect to network ${networkName}:`, error.message);\n      }\n    }\n\n    if (connectedNetworks.length === 0) {\n      throw new NetworkError('Failed to connect to any network');\n    }\n\n    return connectedNetworks;\n  }\n\n  /**\n   * Connect with a signer (for write operations)\n   * @param {ethers.Signer} signer - Ethers signer\n   * @param {string} network - Network name (optional)\n   */\n  connectSigner(signer, network = null) {\n    const targetNetwork = network || this.currentNetwork || this.networkConfig.defaultNetwork;\n\n    this.signers[targetNetwork] = signer;\n    this.providers[targetNetwork] = signer.provider;\n\n    // Reconnect contracts for this network with the new signer\n    if (this.contracts[targetNetwork]) {\n      const addresses = {};\n      if (this.contracts[targetNetwork].registry) addresses.Registry = this.contracts[targetNetwork].registry.address;\n      if (this.contracts[targetNetwork].resolver) addresses.Resolver = this.contracts[targetNetwork].resolver.address;\n      if (this.contracts[targetNetwork].tld) addresses.TLD = this.contracts[targetNetwork].tld.address;\n      if (this.contracts[targetNetwork].rwairdrop) addresses.RWAirdrop = this.contracts[targetNetwork].rwairdrop.address;\n\n      if (Object.keys(addresses).length > 0) {\n        this.connect(addresses, targetNetwork);\n      }\n    }\n  }\n\n  /**\n   * Get Registry contract instance for a specific network or TLD\n   * @param {string} networkOrTld - Network name or TLD (optional, uses current network)\n   * @returns {Registry}\n   */\n  registry(networkOrTld = null) {\n    const network = networkOrTld ? this.getNetworkForTLD(networkOrTld) : (this.currentNetwork || this.networkConfig.defaultNetwork);\n\n    if (!network || !this.contracts[network] || !this.contracts[network].registry) {\n      throw new ContractNotConnectedError('Registry');\n    }\n    return this.contracts[network].registry;\n  }\n\n  /**\n   * Get Resolver contract instance for a specific network or TLD\n   * @param {string} networkOrTld - Network name or TLD (optional, uses current network)\n   * @returns {Resolver}\n   */\n  resolver(networkOrTld = null) {\n    const network = networkOrTld ? this.getNetworkForTLD(networkOrTld) : (this.currentNetwork || this.networkConfig.defaultNetwork);\n\n    if (!network || !this.contracts[network] || !this.contracts[network].resolver) {\n      throw new ContractNotConnectedError('Resolver');\n    }\n    return this.contracts[network].resolver;\n  }\n\n  /**\n   * Get TLD contract instance for a specific network or TLD\n   * @param {string} networkOrTld - Network name or TLD (optional, uses current network)\n   * @returns {TLD}\n   */\n  tld(networkOrTld = null) {\n    const network = networkOrTld ? this.getNetworkForTLD(networkOrTld) : (this.currentNetwork || this.networkConfig.defaultNetwork);\n\n    if (!network || !this.contracts[network] || !this.contracts[network].tld) {\n      throw new ContractNotConnectedError('TLD');\n    }\n    return this.contracts[network].tld;\n  }\n\n  /**\n   * Get RWAirdrop contract instance for a specific network or TLD\n   * @param {string} networkOrTld - Network name or TLD (optional, uses current network)\n   * @returns {RWAirdrop}\n   */\n  rwairdrop(networkOrTld = null) {\n    const network = networkOrTld ? this.getNetworkForTLD(networkOrTld) : (this.currentNetwork || this.networkConfig.defaultNetwork);\n\n    if (!network || !this.contracts[network] || !this.contracts[network].rwairdrop) {\n      throw new ContractNotConnectedError('RWAirdrop');\n    }\n    return this.contracts[network].rwairdrop;\n  }\n\n\n\n\n\n\n\n\n\n  /**\n   * Helper utilities\n   */\n  get utils() {\n    return helpers;\n  }\n\n\n\n  // ==================== Event Monitoring ====================\n\n  /**\n   * Listen to Transfer events from Registry contract\n   * @param {Function} callback - Callback function (from, to, tokenId) => {}\n   * @param {string} networkOrTld - Network name or TLD (optional, uses current network)\n   */\n  onTransfer(callback, networkOrTld = null) {\n    const network = networkOrTld ? this.getNetworkForTLD(networkOrTld) : this.currentNetwork;\n    this.registry(network).onTransfer(callback);\n  }\n\n  /**\n   * Listen to NameResolved events from Resolver contract\n   * @param {Function} callback - Callback function (name, address) => {}\n   * @param {string} networkOrTld - Network name or TLD (optional, uses current network)\n   */\n  onNameResolved(callback, networkOrTld = null) {\n    const network = networkOrTld ? this.getNetworkForTLD(networkOrTld) : this.currentNetwork;\n    this.resolver(network).onNameSet(callback);\n  }\n\n  /**\n   * Listen to DomainMinted events from TLD contract\n   * @param {Function} callback - Callback function (name, owner) => {}\n   * @param {string} networkOrTld - Network name or TLD (optional, uses current network)\n   */\n  onDomainMinted(callback, networkOrTld = null) {\n    const network = networkOrTld ? this.getNetworkForTLD(networkOrTld) : this.currentNetwork;\n    // Note: This assumes the TLD contract has a DomainMinted event\n    // You may need to adjust based on actual contract events\n    this.tld(network).contract.on('DomainMinted', callback);\n  }\n\n  /**\n   * Listen to all Transfer events across all connected networks\n   * @param {Function} callback - Callback function (from, to, tokenId, network) => {}\n   */\n  onTransferAllNetworks(callback) {\n    for (const [network, contracts] of Object.entries(this.contracts)) {\n      if (contracts.registry) {\n        contracts.registry.onTransfer((from, to, tokenId) => {\n          callback(from, to, tokenId, network);\n        });\n      }\n    }\n  }\n\n  /**\n   * Listen to all NameResolved events across all connected networks\n   * @param {Function} callback - Callback function (name, address, network) => {}\n   */\n  onNameResolvedAllNetworks(callback) {\n    for (const [network, contracts] of Object.entries(this.contracts)) {\n      if (contracts.resolver) {\n        contracts.resolver.onNameSet((name, address) => {\n          callback(name, address, network);\n        });\n      }\n    }\n  }\n\n  /**\n   * Remove all event listeners for a specific network\n   * @param {string} networkOrTld - Network name or TLD (optional, uses current network)\n   */\n  removeAllListeners(networkOrTld = null) {\n    const network = networkOrTld ? this.getNetworkForTLD(networkOrTld) : this.currentNetwork;\n\n    if (this.contracts[network]) {\n      if (this.contracts[network].registry) {\n        this.contracts[network].registry.removeAllListeners();\n      }\n      if (this.contracts[network].resolver) {\n        this.contracts[network].resolver.removeAllListeners();\n      }\n      if (this.contracts[network].tld) {\n        this.contracts[network].tld.removeAllListeners();\n      }\n      if (this.contracts[network].rwairdrop) {\n        this.contracts[network].rwairdrop.removeAllListeners();\n      }\n    }\n  }\n\n  /**\n   * Remove all event listeners across all networks\n   */\n  removeAllListenersAllNetworks() {\n    for (const network of Object.keys(this.contracts)) {\n      this.removeAllListeners(network);\n    }\n  }\n\n  // ==================== Convenience Methods ====================\n\n  /**\n   * Resolve a name to an address\n   * @param {string} name - ODude name\n   * @returns {Promise<string>} Resolved address\n   * @throws {NameNotFoundError} When name doesn't exist\n   * @throws {NetworkError} When network is not available\n   * @throws {UnsupportedTLDError} When TLD is not supported\n   */\n  async resolve(name) {\n    try {\n      if (!name || typeof name !== 'string') {\n        throw new Error('Invalid name provided');\n      }\n\n      const parts = name.split('.');\n      if (parts.length < 2) {\n        throw new Error('Invalid domain format. Expected format: name.tld');\n      }\n\n      const tld = parts.pop();\n      const network = this.getNetworkForTLD(tld);\n\n      if (!this.networkConfig.networks[network]) {\n        throw new UnsupportedTLDError(tld);\n      }\n\n      const result = await this.resolver(network).resolve(name);\n      if (!result || result === '0x0000000000000000000000000000000000000000') {\n        throw new NameNotFoundError(name);\n      }\n\n      return result;\n    } catch (error) {\n      if (error instanceof NameNotFoundError ||\n          error instanceof UnsupportedTLDError ||\n          error instanceof NetworkError) {\n        throw error;\n      }\n      throw new NameNotFoundError(name);\n    }\n  }\n\n  /**\n   * Reverse resolve an address to a name\n   * @param {string} address - Ethereum address\n   * @param {string} networkOrTld - Network name or TLD (optional)\n   * @returns {Promise<string>} Primary name\n   */\n  async reverse(address, networkOrTld = null) {\n    const network = networkOrTld ? this.getNetworkForTLD(networkOrTld) : this.currentNetwork;\n    return await this.resolver(network).reverse(address);\n  }\n\n  /**\n   * Get owner of a name\n   * @param {string} name - ODude name\n   * @returns {Promise<string>} Owner address\n   * @throws {NameNotFoundError} When name doesn't exist\n   * @throws {UnsupportedTLDError} When TLD is not supported\n   */\n  async getOwner(name) {\n    try {\n      if (!name || typeof name !== 'string') {\n        throw new Error('Invalid name provided');\n      }\n\n      const parts = name.split('.');\n      if (parts.length < 2) {\n        throw new Error('Invalid domain format. Expected format: name.tld');\n      }\n\n      const tld = parts.pop();\n      const network = this.getNetworkForTLD(tld);\n\n      if (!this.networkConfig.networks[network]) {\n        throw new UnsupportedTLDError(tld);\n      }\n\n      return await this.registry(network).getOwnerByName(name);\n    } catch (error) {\n      if (error instanceof UnsupportedTLDError) {\n        throw error;\n      }\n      throw new NameNotFoundError(name);\n    }\n  }\n\n  /**\n   * Get comprehensive name info\n   * @param {string} name - ODude name\n   * @returns {Promise<Object>} Name information\n   */\n  async getNameInfo(name) {\n    const tld = name.split('.').pop();\n    const network = this.getNetworkForTLD(tld);\n\n    const tokenId = await this.registry(network).getTokenId(name);\n    const [owner, metadata, tokenURI, resolutionRecord] = await Promise.all([\n      this.registry(network).ownerOf(tokenId),\n      this.registry(network).getNFTMetadata(tokenId),\n      this.registry(network).tokenURI(tokenId),\n      this.resolver(network).getResolutionRecord(name)\n    ]);\n\n    return {\n      name,\n      tokenId,\n      owner,\n      metadata,\n      tokenURI,\n      resolvedAddress: resolutionRecord.resolvedAddress,\n      exists: resolutionRecord.exists,\n      network\n    };\n  }\n\n  /**\n   * Check if a domain is eligible for minting\n   * @param {string} domainName - Full domain name (e.g., \"alice@crypto\")\n   * @returns {Promise<Object>} Eligibility information\n   */\n  async checkMintEligibility(domainName) {\n    const tld = domainName.split('@').pop();\n    const network = this.getNetworkForTLD(tld);\n\n    return await this.tld(network).checkMintEligibility(domainName, this.resolver(network));\n  }\n\n  /**\n   * Get comprehensive TLD information\n   * @param {string} tldName - TLD name (e.g., \"crypto\")\n   * @returns {Promise<Object>} TLD information\n   */\n  async getTldInfo(tldName) {\n    const network = this.getNetworkForTLD(tldName);\n    const tldContract = this.tld(network);\n    const resolverContract = this.resolver(network);\n\n    try {\n      // Get TLD token ID first\n      const tokenId = await tldContract.getTLDId(tldName);\n\n      // Get comprehensive TLD info from the contract\n      const tldInfo = await tldContract.getTLD(tokenId);\n\n      // Get resolved address for the TLD\n      let resolvedAddress = null;\n      try {\n        resolvedAddress = await resolverContract.resolve(tldName);\n      } catch (e) {\n        // TLD might not have a resolved address\n      }\n\n      return {\n        tokenId: tldInfo.id,\n        name: tldInfo.name,\n        getTLDOwner: tldInfo.owner,\n        resolvedAddress: resolvedAddress,\n        getTLDPrice: tldInfo.price,\n        getCommission: tldInfo.commission,\n        getErcToken: tldInfo.erc20Token,\n        getTokenPrice: tldInfo.price,\n        isTLDActive: tldInfo.exists,\n        network\n      };\n    } catch (error) {\n      throw new Error(`Failed to get TLD info for ${tldName}: ${error.message}`);\n    }\n  }\n\n\n\n  /**\n   * Mint a domain (convenience method)\n   * @param {string} domainName - Full domain name (e.g., \"alice@crypto\")\n   * @param {string} toAddress - Address to mint the domain to\n   * @param {Object} options - Minting options\n   * @param {bigint|string} options.value - ETH value to send (for payment)\n   * @param {number} options.gasLimit - Gas limit (optional)\n   * @returns {Promise<Object>} Transaction response\n   */\n  async mintDomain(domainName, toAddress, options = {}) {\n    const tld = domainName.split('@').pop();\n    const network = this.getNetworkForTLD(tld);\n    const registryContract = this.registry(network);\n    return await this.tld(network).mintDomain(domainName, toAddress, options, registryContract);\n  }\n\n  /**\n   * Mint a TLD (Top-Level Domain)\n   * @param {string} tldName - TLD name (e.g., \"crypto\", \"sepolia\")\n   * @param {string} toAddress - Address to mint the TLD to\n   * @param {Object} options - Minting options\n   * @param {bigint|string} options.value - ETH value to send (for payment)\n   * @param {number} options.gasLimit - Gas limit (optional)\n   * @returns {Promise<Object>} Transaction response\n   * @throws {MintingError} When TLD minting fails\n   */\n  async mintTLD(tldName, toAddress, options = {}) {\n    try {\n      if (!tldName || typeof tldName !== 'string') {\n        throw new Error('Invalid TLD name provided');\n      }\n\n      if (!toAddress || typeof toAddress !== 'string') {\n        throw new Error('Invalid address provided');\n      }\n\n      // Use the current network (typically basesepolia)\n      const network = this.currentNetwork;\n      if (!network) {\n        throw new Error('No network connected. Please connect to a network first.');\n      }\n\n      const registryContract = this.registry(network);\n      const tldContract = this.tld(network);\n\n      // Check eligibility first\n      const eligibility = await tldContract.checkMintEligibility(tldName);\n      if (!eligibility.eligible) {\n        throw new Error(`TLD not eligible for minting: ${eligibility.reason}`);\n      }\n\n      // Generate a token ID for the TLD using the helper function\n      const { randomTokenId } = require('./utils/helpers');\n      const tokenId = randomTokenId();\n\n      // Create a basic metadata URI for the TLD\n      const tokenUri = `https://metadata.odude.com/tld/${tldName}`;\n\n      const txOptions = {};\n\n      if (options.value) {\n        txOptions.value = options.value;\n      } else {\n        // Use the cost from eligibility check\n        txOptions.value = eligibility.cost;\n      }\n\n      if (options.gasLimit) {\n        txOptions.gasLimit = options.gasLimit;\n      }\n\n      // First mint the TLD NFT through Registry\n      const mintTx = await registryContract.mintDomain(tokenId, tldName, tokenUri, toAddress, txOptions);\n\n      // Wait for the transaction to be mined\n      const receipt = await mintTx.wait();\n\n      // Then register the TLD in the TLD contract\n      try {\n        const registerTx = await tldContract.registerTLD(tokenId, tldName, toAddress);\n        await registerTx.wait();\n      } catch (registerError) {\n        console.warn('TLD NFT minted but registration failed:', registerError.message);\n        console.warn('You may need to register the TLD manually.');\n      }\n\n      return receipt;\n    } catch (error) {\n      throw new Error(`Failed to mint TLD: ${error.message}`);\n    }\n  }\n\n  /**\n   * Get airdrop info for an address\n   * @param {string} address - Ethereum address\n   * @param {string} networkOrTld - Network name or TLD (optional, uses current network)\n   * @returns {Promise<Object>} Airdrop information\n   * @throws {NetworkError} When network is not available\n   * @throws {ContractNotConnectedError} When RWAirdrop contract is not connected\n   */\n  async getAirdropInfo(address, networkOrTld = null) {\n    try {\n      if (!address || typeof address !== 'string') {\n        throw new Error('Invalid address provided');\n      }\n\n      const network = networkOrTld ? this.getNetworkForTLD(networkOrTld) : this.currentNetwork;\n\n      if (!network) {\n        throw new NetworkError('No network specified and no current network set');\n      }\n\n      return await this.rwairdrop(network).getAirdropInfo(address);\n    } catch (error) {\n      if (error instanceof NetworkError || error instanceof ContractNotConnectedError) {\n        throw error;\n      }\n      throw new NetworkError(`Failed to get airdrop info for address ${address}: ${error.message}`, networkOrTld);\n    }\n  }\n\n  // ==================== Extended Methods (from old_sample.js) ====================\n\n  /**\n   * Get total number of names owned by an address\n   * @param {string} address - Wallet address\n   * @returns {Promise<bigint>} Total number of names\n   * @throws {NetworkError} When network is not available\n   * @throws {ContractNotConnectedError} When Registry contract is not connected\n   */\n  async getTotalNames(address) {\n    try {\n      if (!address || typeof address !== 'string') {\n        throw new Error('Invalid address provided');\n      }\n\n      return await this.registry().balanceOf(address);\n    } catch (error) {\n      if (error instanceof NetworkError || error instanceof ContractNotConnectedError) {\n        throw error;\n      }\n      throw new NetworkError(`Failed to get total names for address ${address}: ${error.message}`);\n    }\n  }\n\n  /**\n   * Get list of names owned by an address\n   * @param {string} address - Wallet address\n   * @returns {Promise<Array<{tokenId: string, name: string}>>} List of names with token IDs\n   * @throws {NetworkError} When network is not available\n   * @throws {ContractNotConnectedError} When Registry contract is not connected\n   */\n  async getNamesList(address) {\n    try {\n      if (!address || typeof address !== 'string') {\n        throw new Error('Invalid address provided');\n      }\n\n      const balance = await this.registry().balanceOf(address);\n      const names = [];\n\n      for (let i = 0; i < balance; i++) {\n        try {\n          const tokenId = await this.registry().tokenOfOwnerByIndex(address, i);\n          const name = await this.registry().nameOf(tokenId);\n          names.push({\n            tokenId: tokenId.toString(),\n            name: name\n          });\n        } catch (error) {\n          console.error(`Error fetching name at index ${i} for address ${address}:`, error.message);\n          // Continue with other names instead of failing completely\n        }\n      }\n\n      return names;\n    } catch (error) {\n      if (error instanceof NetworkError || error instanceof ContractNotConnectedError) {\n        throw error;\n      }\n      throw new NetworkError(`Failed to get names list for address ${address}: ${error.message}`);\n    }\n  }\n\n  /**\n   * Get comprehensive details about a name\n   * @param {string} name - ODude name\n   * @returns {Promise<Object>} Comprehensive name details\n   * @throws {NameNotFoundError} When name doesn't exist\n   * @throws {UnsupportedTLDError} When TLD is not supported\n   * @throws {NetworkError} When network is not available\n   */\n  async getNameDetails(name) {\n    try {\n      if (!name || typeof name !== 'string') {\n        throw new Error('Invalid name provided');\n      }\n\n      const parts = name.split('.');\n      if (parts.length < 2) {\n        throw new Error('Invalid domain format. Expected format: name.tld');\n      }\n\n      const tld = parts.pop();\n      const network = this.getNetworkForTLD(tld);\n\n      if (!this.networkConfig.networks[network]) {\n        throw new UnsupportedTLDError(tld);\n      }\n\n      const tokenId = await this.registry(network).getTokenId(name);\n      const [owner, metadata, tokenURI, exists] = await Promise.all([\n        this.registry(network).ownerOf(tokenId),\n        this.registry(network).getNFTMetadata(tokenId),\n        this.registry(network).tokenURI(tokenId),\n        this.resolver(network).nameExists(name)\n      ]);\n\n      let resolvedAddress = null;\n      if (exists) {\n        try {\n          resolvedAddress = await this.resolver(network).resolve(name);\n        } catch (e) {\n          // Name exists but not resolved\n        }\n      }\n\n      return {\n        name,\n        tokenId: tokenId.toString(),\n        owner,\n        metadata,\n        tokenURI,\n        exists,\n        resolvedAddress\n      };\n    } catch (error) {\n      if (error instanceof NameNotFoundError ||\n          error instanceof UnsupportedTLDError ||\n          error instanceof NetworkError) {\n        throw error;\n      }\n      throw new NameNotFoundError(name);\n    }\n  }\n\n  /**\n   * Get name by token ID\n   * @param {number|string|bigint} tokenId - Token ID\n   * @returns {Promise<string>} Name\n   */\n  async getNameById(tokenId) {\n    return await this.registry().nameOf(tokenId);\n  }\n\n  /**\n   * Get all names (paginated)\n   * @param {number} startIndex - Start index (default: 0)\n   * @param {number} count - Number of names to fetch (default: 10)\n   * @returns {Promise<Array<{tokenId: string, name: string, owner: string}>>} List of names\n   */\n  async getAllNames(startIndex = 0, count = 10) {\n    const totalSupply = await this.registry().totalSupply();\n    const endIndex = Math.min(Number(startIndex) + count, Number(totalSupply));\n    const names = [];\n\n    for (let i = startIndex; i < endIndex; i++) {\n      try {\n        const tokenId = await this.registry().tokenByIndex(i);\n        const name = await this.registry().nameOf(tokenId);\n        const owner = await this.registry().ownerOf(tokenId);\n\n        names.push({\n          tokenId: tokenId.toString(),\n          name,\n          owner\n        });\n      } catch (error) {\n        console.error(`Error fetching token at index ${i}:`, error.message);\n      }\n    }\n\n    return names;\n  }\n\n\n\n  /**\n   * Get approved address for a token\n   * @param {number|string|bigint} tokenId - Token ID\n   * @returns {Promise<string>} Approved address\n   */\n  async getApproved(tokenId) {\n    return await this.registry().getApproved(tokenId);\n  }\n\n  /**\n   * Get network list information for 3rd party validation\n   * @returns {Object} Network configuration and connection status\n   */\n  NetworkList() {\n    const networkInfo = {\n      supportedNetworks: {},\n      currentNetwork: this.currentNetwork,\n      connectedNetworks: Object.keys(this.providers),\n      tldMappings: this.networkConfig.tldMappings,\n      defaultNetwork: this.networkConfig.defaultNetwork\n    };\n\n    // Add detailed information for each supported network\n    for (const [networkName, networkConfig] of Object.entries(this.networkConfig.networks)) {\n      networkInfo.supportedNetworks[networkName] = {\n        name: networkConfig.name,\n        chainId: networkConfig.chainId,\n        defaultRpcUrl: networkConfig.defaultRpcUrl,\n        rpcUrlEnvVar: networkConfig.rpcUrlEnvVar,\n        contracts: networkConfig.contracts,\n        isConnected: this.providers[networkName] ? true : false,\n        hasContracts: this._hasValidContracts(networkConfig.contracts)\n      };\n    }\n\n    return networkInfo;\n  }\n\n  /**\n   * Display network list information in console\n   */\n  displayNetworkList() {\n    const networkInfo = this.NetworkList();\n\n    console.log('\\n=== ODude SDK Network Information ===');\n    console.log(`Current Network: ${networkInfo.currentNetwork || 'None'}`);\n    console.log(`Default Network: ${networkInfo.defaultNetwork}`);\n    console.log(`Connected Networks: ${networkInfo.connectedNetworks.join(', ') || 'None'}`);\n\n    console.log('\\n--- Supported Networks ---');\n    for (const [networkName, config] of Object.entries(networkInfo.supportedNetworks)) {\n      const status = config.isConnected ? '✅' : '❌';\n      const contracts = config.hasContracts ? '✅' : '⚠️';\n      console.log(`${status} ${networkName} (${config.name})`);\n      console.log(`   Chain ID: ${config.chainId}`);\n      console.log(`   RPC URL: ${config.defaultRpcUrl}`);\n      console.log(`   Contracts Deployed: ${contracts}`);\n      console.log(`   Connected: ${config.isConnected}`);\n      console.log('');\n    }\n\n    console.log('--- TLD Mappings ---');\n    for (const [tld, network] of Object.entries(networkInfo.tldMappings)) {\n      console.log(`${tld} → ${network}`);\n    }\n    console.log('');\n\n    return networkInfo;\n  }\n\n  /**\n   * Check if network has valid contract addresses\n   * @private\n   * @param {Object} contracts - Contract addresses\n   * @returns {boolean}\n   */\n  _hasValidContracts(contracts) {\n    const zeroAddress = '0x0000000000000000000000000000000000000000';\n    return Object.values(contracts).some(address => address !== zeroAddress);\n  }\n}\n\nmodule.exports = ODudeSDK;\n\n","/**\n * ODude SDK - Main export file\n * Developer-friendly SDK for interacting with ODude smart contracts\n *\n * Supports both CommonJS (require) and ES Modules (import) syntax:\n *\n * CommonJS:\n *   const ODudeSDK = require('@odude/odude-sdk');\n *   const { Registry, Resolver } = require('@odude/odude-sdk');\n *\n * ES Modules:\n *   import ODudeSDK from '@odude/odude-sdk';\n *   import { Registry, Resolver } from '@odude/odude-sdk';\n *\n * TypeScript:\n *   import ODudeSDK, { Registry, Resolver, ODudeSDKConfig } from '@odude/odude-sdk';\n */\n\nconst ODudeSDK = require('./ODudeSDK');\nconst Registry = require('./contracts/Registry');\nconst Resolver = require('./contracts/Resolver');\nconst TLD = require('./contracts/TLD');\nconst RWAirdrop = require('./contracts/RWAirdrop');\nconst helpers = require('./utils/helpers');\n\n// Import error classes for re-export\nconst {\n  ODudeSDKError,\n  TokenNotFoundError,\n  NameNotFoundError,\n  NetworkError,\n  ConfigurationError,\n  ContractNotConnectedError,\n  UnsupportedTLDError,\n  MintingError\n} = require('./utils/errors');\n\n// Main default export\nmodule.exports = ODudeSDK;\n\n// Named exports for tree-shaking and modern import syntax\nmodule.exports.ODudeSDK = ODudeSDK;\nmodule.exports.Registry = Registry;\nmodule.exports.Resolver = Resolver;\nmodule.exports.TLD = TLD;\nmodule.exports.RWAirdrop = RWAirdrop;\nmodule.exports.utils = helpers;\n\n// Error exports\nmodule.exports.ODudeSDKError = ODudeSDKError;\nmodule.exports.TokenNotFoundError = TokenNotFoundError;\nmodule.exports.NameNotFoundError = NameNotFoundError;\nmodule.exports.NetworkError = NetworkError;\nmodule.exports.ConfigurationError = ConfigurationError;\nmodule.exports.ContractNotConnectedError = ContractNotConnectedError;\nmodule.exports.UnsupportedTLDError = UnsupportedTLDError;\nmodule.exports.MintingError = MintingError;\n\n// ESM compatibility\nmodule.exports.default = ODudeSDK;\n\n// Support for destructuring default export\nmodule.exports.__esModule = true;\n\n","import { getDefaultExportFromCjs } from \"\u0000commonjsHelpers.js\";\nimport { __require as requireSrc } from \"E:\\\\odude\\\\npmjs\\\\odude-sdk\\\\src\\\\index.js\";\nvar srcExports = requireSrc();\nexport { srcExports as __moduleExports };\nexport default /*@__PURE__*/getDefaultExportFromCjs(srcExports);"],"names":["require$$1","require$$2","require$$3","require$$4","require$$5","require$$6","require$$0","srcModule"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}