{"version":3,"file":"rpc-BMyYpWRW-BEv3X5Xi.mjs","names":[],"sources":["../../adapter-evm-core/dist/rpc-BMyYpWRW.mjs"],"sourcesContent":["import { appConfigService, isValidUrl, logger, userNetworkServiceConfigService } from \"@openzeppelin/ui-utils\";\n\n//#region src/configuration/rpc.ts\n/**\n* Builds a complete RPC URL from a user RPC provider configuration.\n* For simplified RPC configuration, this just returns the URL as-is since\n* users are now providing complete RPC URLs including any API keys.\n*\n* @param config The user RPC provider configuration\n* @returns The RPC URL\n*/\nfunction buildRpcUrl(config) {\n\treturn config.url;\n}\n/**\n* Extracts the user-configured RPC URL from UserNetworkServiceConfigService.\n*\n* @param networkId - The network ID to get the RPC URL for\n* @returns The RPC URL string if configured, undefined otherwise\n*/\nfunction getUserRpcUrl(networkId) {\n\tconst svcCfg = userNetworkServiceConfigService.get(networkId, \"rpc\");\n\tif (svcCfg && typeof svcCfg === \"object\" && \"rpcUrl\" in svcCfg) return svcCfg.rpcUrl;\n}\n/**\n* Resolves the RPC URL for a given EVM network configuration.\n* Priority order:\n* 1. User-provided RPC configuration (from UserRpcConfigService)\n* 2. RPC URL override from AppConfigService\n* 3. Default rpcUrl from the network configuration\n*\n* @param networkConfig - EVM-compatible network configuration (works with any ecosystem).\n* @returns The resolved RPC URL string.\n* @throws If no RPC URL can be resolved (neither user config, override, nor default is present and valid).\n*/\nfunction resolveRpcUrl(networkConfig) {\n\tconst logSystem = \"RpcResolver\";\n\tconst networkId = networkConfig.id;\n\tconst userRpcUrl = getUserRpcUrl(networkId);\n\tif (userRpcUrl) {\n\t\tconst userRpcUrlString = String(userRpcUrl);\n\t\tif (isValidUrl(userRpcUrlString)) {\n\t\t\tlogger.info(logSystem, `Using user-configured RPC URL for network ${networkId}`);\n\t\t\treturn userRpcUrlString;\n\t\t} else logger.warn(logSystem, `User-configured RPC URL for ${networkId} is invalid: ${userRpcUrlString}. Falling back.`);\n\t}\n\tconst rpcOverrideSetting = appConfigService.getRpcEndpointOverride(networkId);\n\tlet rpcUrlFromOverride;\n\tif (typeof rpcOverrideSetting === \"string\") rpcUrlFromOverride = rpcOverrideSetting;\n\telse if (typeof rpcOverrideSetting === \"object\" && rpcOverrideSetting) {\n\t\tif (\"url\" in rpcOverrideSetting && \"isCustom\" in rpcOverrideSetting) rpcUrlFromOverride = buildRpcUrl(rpcOverrideSetting);\n\t\telse if (\"http\" in rpcOverrideSetting) rpcUrlFromOverride = rpcOverrideSetting.http;\n\t}\n\tif (rpcUrlFromOverride) {\n\t\tlogger.info(logSystem, `Using overridden RPC URL for network ${networkId}: ${rpcUrlFromOverride}`);\n\t\tif (isValidUrl(rpcUrlFromOverride)) return rpcUrlFromOverride;\n\t\telse logger.warn(logSystem, `Overridden RPC URL for ${networkId} is invalid: ${rpcUrlFromOverride}. Falling back.`);\n\t}\n\tif (networkConfig.rpcUrl && isValidUrl(networkConfig.rpcUrl)) {\n\t\tlogger.debug(logSystem, `Using default RPC URL for network ${networkId}: ${networkConfig.rpcUrl}`);\n\t\treturn networkConfig.rpcUrl;\n\t}\n\tlogger.error(logSystem, `No valid RPC URL could be resolved for network ${networkId}. Checked user config, override, and networkConfig.rpcUrl.`);\n\tthrow new Error(`No valid RPC URL configured for network ${networkConfig.name} (ID: ${networkId}).`);\n}\n/**\n* Validates an RPC endpoint configuration for EVM networks.\n* @param rpcConfig - The RPC provider configuration to validate\n* @returns True if the configuration is valid, false otherwise\n*/\nfunction validateEvmRpcEndpoint(rpcConfig) {\n\ttry {\n\t\tif (!isValidUrl(rpcConfig.url)) {\n\t\t\tlogger.error(\"validateEvmRpcEndpoint\", `Invalid RPC URL format: ${rpcConfig.url}`);\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t} catch (error) {\n\t\tlogger.error(\"validateEvmRpcEndpoint\", \"Error validating RPC endpoint:\", error);\n\t\treturn false;\n\t}\n}\n/**\n* Tests the connection to an EVM RPC endpoint with a timeout.\n* @param rpcConfig - The RPC provider configuration to test\n* @param timeoutMs - Timeout in milliseconds (default: 5000ms)\n* @returns Connection test results including success status, latency, and any errors\n*/\nasync function testEvmRpcConnection(rpcConfig, timeoutMs = 5e3) {\n\tif (!rpcConfig.url) return {\n\t\tsuccess: false,\n\t\terror: \"RPC URL is required\"\n\t};\n\tconst controller = new AbortController();\n\tconst timeoutId = setTimeout(() => controller.abort(), timeoutMs);\n\ttry {\n\t\tconst startTime = Date.now();\n\t\tconst response = await fetch(rpcConfig.url, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\tbody: JSON.stringify({\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tmethod: \"eth_blockNumber\",\n\t\t\t\tparams: [],\n\t\t\t\tid: 1\n\t\t\t}),\n\t\t\tsignal: controller.signal\n\t\t});\n\t\tif (!response.ok) return {\n\t\t\tsuccess: false,\n\t\t\terror: `HTTP error: ${response.status}`\n\t\t};\n\t\tconst data = await response.json();\n\t\tconst latency = Date.now() - startTime;\n\t\tif (data.error) return {\n\t\t\tsuccess: false,\n\t\t\terror: data.error.message || \"RPC error\"\n\t\t};\n\t\treturn {\n\t\t\tsuccess: true,\n\t\t\tlatency\n\t\t};\n\t} catch (error) {\n\t\tlogger.error(\"testEvmRpcConnection\", \"Connection test failed:\", error);\n\t\tif (error instanceof Error && error.name === \"AbortError\") return {\n\t\t\tsuccess: false,\n\t\t\terror: `Connection timeout after ${timeoutMs}ms`\n\t\t};\n\t\treturn {\n\t\t\tsuccess: false,\n\t\t\terror: error instanceof Error ? error.message : \"Connection failed\"\n\t\t};\n\t} finally {\n\t\tclearTimeout(timeoutId);\n\t}\n}\n/**\n* Gets the current block number from an EVM network.\n*\n* @param networkConfig - EVM-compatible network configuration (works with any ecosystem)\n* @returns Promise resolving to the current block number\n* @throws Error if the RPC call fails\n*/\nasync function getEvmCurrentBlock(networkConfig) {\n\tconst rpcUrl = resolveRpcUrl(networkConfig);\n\ttry {\n\t\tconst response = await fetch(rpcUrl, {\n\t\t\tmethod: \"POST\",\n\t\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\t\tbody: JSON.stringify({\n\t\t\t\tjsonrpc: \"2.0\",\n\t\t\t\tmethod: \"eth_blockNumber\",\n\t\t\t\tparams: [],\n\t\t\t\tid: 1\n\t\t\t})\n\t\t});\n\t\tif (!response.ok) throw new Error(`RPC request failed with status ${response.status}`);\n\t\tconst data = await response.json();\n\t\tif (data.error) throw new Error(data.error.message || \"RPC error\");\n\t\tif (data.result === void 0 || data.result === null) throw new Error(\"RPC response missing result field\");\n\t\tconst blockNumber = parseInt(data.result, 16);\n\t\tif (isNaN(blockNumber)) throw new Error(`Invalid block number returned: ${data.result}`);\n\t\treturn blockNumber;\n\t} catch (error) {\n\t\tlogger.error(\"getEvmCurrentBlock\", \"Failed to get current block:\", error);\n\t\tthrow new Error(`Failed to get current block: ${error instanceof Error ? error.message : String(error)}`);\n\t}\n}\n\n//#endregion\nexport { testEvmRpcConnection as a, resolveRpcUrl as i, getEvmCurrentBlock as n, validateEvmRpcEndpoint as o, getUserRpcUrl as r, buildRpcUrl as t };\n//# sourceMappingURL=rpc-BMyYpWRW.mjs.map"],"mappings":";;;;;;;;;;;AAWA,SAAS,YAAY,QAAQ;AAC5B,QAAO,OAAO;;;;;;;;AAQf,SAAS,cAAc,WAAW;CACjC,MAAM,SAAS,gCAAgC,IAAI,WAAW,MAAM;AACpE,KAAI,UAAU,OAAO,WAAW,YAAY,YAAY,OAAQ,QAAO,OAAO;;;;;;;;;;;;;AAa/E,SAAS,cAAc,eAAe;CACrC,MAAM,YAAY;CAClB,MAAM,YAAY,cAAc;CAChC,MAAM,aAAa,cAAc,UAAU;AAC3C,KAAI,YAAY;EACf,MAAM,mBAAmB,OAAO,WAAW;AAC3C,MAAI,WAAW,iBAAiB,EAAE;AACjC,UAAO,KAAK,WAAW,6CAA6C,YAAY;AAChF,UAAO;QACD,QAAO,KAAK,WAAW,+BAA+B,UAAU,eAAe,iBAAiB,iBAAiB;;CAEzH,MAAM,qBAAqB,iBAAiB,uBAAuB,UAAU;CAC7E,IAAI;AACJ,KAAI,OAAO,uBAAuB,SAAU,sBAAqB;UACxD,OAAO,uBAAuB,YAAY,oBAClD;MAAI,SAAS,sBAAsB,cAAc,mBAAoB,sBAAqB,YAAY,mBAAmB;WAChH,UAAU,mBAAoB,sBAAqB,mBAAmB;;AAEhF,KAAI,oBAAoB;AACvB,SAAO,KAAK,WAAW,wCAAwC,UAAU,IAAI,qBAAqB;AAClG,MAAI,WAAW,mBAAmB,CAAE,QAAO;MACtC,QAAO,KAAK,WAAW,0BAA0B,UAAU,eAAe,mBAAmB,iBAAiB;;AAEpH,KAAI,cAAc,UAAU,WAAW,cAAc,OAAO,EAAE;AAC7D,SAAO,MAAM,WAAW,qCAAqC,UAAU,IAAI,cAAc,SAAS;AAClG,SAAO,cAAc;;AAEtB,QAAO,MAAM,WAAW,kDAAkD,UAAU,4DAA4D;AAChJ,OAAM,IAAI,MAAM,2CAA2C,cAAc,KAAK,QAAQ,UAAU,IAAI;;;;;;;AAOrG,SAAS,uBAAuB,WAAW;AAC1C,KAAI;AACH,MAAI,CAAC,WAAW,UAAU,IAAI,EAAE;AAC/B,UAAO,MAAM,0BAA0B,2BAA2B,UAAU,MAAM;AAClF,UAAO;;AAER,SAAO;UACC,OAAO;AACf,SAAO,MAAM,0BAA0B,kCAAkC,MAAM;AAC/E,SAAO;;;;;;;;;AAST,eAAe,qBAAqB,WAAW,YAAY,KAAK;AAC/D,KAAI,CAAC,UAAU,IAAK,QAAO;EAC1B,SAAS;EACT,OAAO;EACP;CACD,MAAM,aAAa,IAAI,iBAAiB;CACxC,MAAM,YAAY,iBAAiB,WAAW,OAAO,EAAE,UAAU;AACjE,KAAI;EACH,MAAM,YAAY,KAAK,KAAK;EAC5B,MAAM,WAAW,MAAM,MAAM,UAAU,KAAK;GAC3C,QAAQ;GACR,SAAS,EAAE,gBAAgB,oBAAoB;GAC/C,MAAM,KAAK,UAAU;IACpB,SAAS;IACT,QAAQ;IACR,QAAQ,EAAE;IACV,IAAI;IACJ,CAAC;GACF,QAAQ,WAAW;GACnB,CAAC;AACF,MAAI,CAAC,SAAS,GAAI,QAAO;GACxB,SAAS;GACT,OAAO,eAAe,SAAS;GAC/B;EACD,MAAM,OAAO,MAAM,SAAS,MAAM;EAClC,MAAM,UAAU,KAAK,KAAK,GAAG;AAC7B,MAAI,KAAK,MAAO,QAAO;GACtB,SAAS;GACT,OAAO,KAAK,MAAM,WAAW;GAC7B;AACD,SAAO;GACN,SAAS;GACT;GACA;UACO,OAAO;AACf,SAAO,MAAM,wBAAwB,2BAA2B,MAAM;AACtE,MAAI,iBAAiB,SAAS,MAAM,SAAS,aAAc,QAAO;GACjE,SAAS;GACT,OAAO,4BAA4B,UAAU;GAC7C;AACD,SAAO;GACN,SAAS;GACT,OAAO,iBAAiB,QAAQ,MAAM,UAAU;GAChD;WACQ;AACT,eAAa,UAAU;;;;;;;;;;AAUzB,eAAe,mBAAmB,eAAe;CAChD,MAAM,SAAS,cAAc,cAAc;AAC3C,KAAI;EACH,MAAM,WAAW,MAAM,MAAM,QAAQ;GACpC,QAAQ;GACR,SAAS,EAAE,gBAAgB,oBAAoB;GAC/C,MAAM,KAAK,UAAU;IACpB,SAAS;IACT,QAAQ;IACR,QAAQ,EAAE;IACV,IAAI;IACJ,CAAC;GACF,CAAC;AACF,MAAI,CAAC,SAAS,GAAI,OAAM,IAAI,MAAM,kCAAkC,SAAS,SAAS;EACtF,MAAM,OAAO,MAAM,SAAS,MAAM;AAClC,MAAI,KAAK,MAAO,OAAM,IAAI,MAAM,KAAK,MAAM,WAAW,YAAY;AAClE,MAAI,KAAK,WAAW,KAAK,KAAK,KAAK,WAAW,KAAM,OAAM,IAAI,MAAM,oCAAoC;EACxG,MAAM,cAAc,SAAS,KAAK,QAAQ,GAAG;AAC7C,MAAI,MAAM,YAAY,CAAE,OAAM,IAAI,MAAM,kCAAkC,KAAK,SAAS;AACxF,SAAO;UACC,OAAO;AACf,SAAO,MAAM,sBAAsB,gCAAgC,MAAM;AACzE,QAAM,IAAI,MAAM,gCAAgC,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,GAAG"}