{"version":3,"file":"relayer-D6OROZ3N-Da5V-13m.cjs","names":["Configuration","RelayersApi"],"sources":["../../adapter-evm-core/dist/relayer-D6OROZ3N.mjs"],"sourcesContent":["import { logger } from \"@openzeppelin/ui-utils\";\nimport { encodeFunctionData, formatEther } from \"viem\";\nimport { Configuration, RelayersApi } from \"@openzeppelin/relayer-sdk\";\n\n//#region src/transaction/relayer.ts\n/**\n* Relayer Execution Strategy\n*\n* Implements transaction execution through the OpenZeppelin Relayer service.\n* This strategy sends transactions to a relayer for gas sponsorship and broadcasting.\n*/\n/**\n* Implements the ExecutionStrategy for the OpenZeppelin Relayer.\n* This strategy sends the transaction to the relayer service, which then handles\n* gas payment, signing, and broadcasting. It includes a polling mechanism to wait\n* for the transaction to be mined and return the final hash.\n*/\nvar RelayerExecutionStrategy = class {\n\tasync execute(transactionData, executionConfig, _walletImplementation, onStatusChange, runtimeApiKey) {\n\t\tconst relayerConfig = executionConfig;\n\t\tif (!runtimeApiKey) throw new Error(\"API Key is required for Relayer execution.\");\n\t\tconst { transactionId } = await this.sendTransactionViaRelayer(transactionData, relayerConfig, runtimeApiKey);\n\t\tonStatusChange(\"pendingRelayer\", { transactionId });\n\t\tconst sdkConfig = new Configuration({\n\t\t\tbasePath: relayerConfig.serviceUrl,\n\t\t\taccessToken: runtimeApiKey\n\t\t});\n\t\treturn { txHash: await this.pollForTransactionHash(relayerConfig.relayer.relayerId, transactionId, sdkConfig) };\n\t}\n\t/**\n\t* Fetches and filters relayers for a specific EVM network from the OpenZeppelin Relayer service.\n\t* This function handles pagination to retrieve all available relayers.\n\t*\n\t* @param serviceUrl - The base URL of the relayer service.\n\t* @param accessToken - The session-based API key for authentication.\n\t* @param networkConfig - EVM-compatible network configuration to filter relayers by (works with any ecosystem).\n\t* @returns A promise that resolves to an array of compatible relayer details.\n\t* @throws If the API call fails or returns an unsuccessful response.\n\t*/\n\tasync getEvmRelayers(serviceUrl, accessToken, networkConfig) {\n\t\tlogger.info(\"[Relayer] Getting relayers with access token\", accessToken.slice(0, 5).padEnd(accessToken.length, \"*\"));\n\t\tconst relayersApi = new RelayersApi(new Configuration({\n\t\t\tbasePath: serviceUrl,\n\t\t\taccessToken\n\t\t}));\n\t\tlet allRelayers = [];\n\t\tlet currentPage = 1;\n\t\tlet totalItems = 0;\n\t\tlet hasMore = true;\n\t\tdo {\n\t\t\tconst { data } = await relayersApi.listRelayers(currentPage, 100);\n\t\t\tif (!data.success || !data.data) throw new Error(`Failed to fetch relayers on page ${currentPage}.`);\n\t\t\tallRelayers = [...allRelayers, ...data.data];\n\t\t\ttotalItems = data.pagination?.total_items || 0;\n\t\t\tif (allRelayers.length >= totalItems) hasMore = false;\n\t\t\telse currentPage++;\n\t\t} while (hasMore);\n\t\treturn allRelayers.filter((r) => r.network_type === \"evm\" && networkConfig.id.includes(r.network)).map((r) => ({\n\t\t\trelayerId: r.id,\n\t\t\tname: r.name,\n\t\t\taddress: r.address || \"\",\n\t\t\tnetwork: r.network,\n\t\t\tpaused: r.paused || false\n\t\t}));\n\t}\n\t/**\n\t* Fetches comprehensive information about a specific relayer including balance and status.\n\t* This function combines multiple SDK API calls to provide rich relayer details.\n\t*\n\t* @param serviceUrl - The base URL of the relayer service.\n\t* @param accessToken - The session-based API key for authentication.\n\t* @param relayerId - The unique identifier of the relayer.\n\t* @param networkConfig - EVM-compatible network configuration to get the native currency symbol (works with any ecosystem).\n\t* @returns A promise that resolves to enhanced relayer details including balance and status.\n\t* @throws If any API call fails or returns an unsuccessful response.\n\t*/\n\tasync getEvmRelayer(serviceUrl, accessToken, relayerId, networkConfig) {\n\t\tlogger.info(\"[Relayer] Getting detailed relayer info\", relayerId);\n\t\tconst relayersApi = new RelayersApi(new Configuration({\n\t\t\tbasePath: serviceUrl,\n\t\t\taccessToken\n\t\t}));\n\t\ttry {\n\t\t\tconst [relayerResponse, balanceResponse, statusResponse] = await Promise.all([\n\t\t\t\trelayersApi.getRelayer(relayerId),\n\t\t\t\trelayersApi.getRelayerBalance(relayerId).catch((err) => {\n\t\t\t\t\tlogger.warn(\"[Relayer] Failed to fetch balance\", err);\n\t\t\t\t\treturn null;\n\t\t\t\t}),\n\t\t\t\trelayersApi.getRelayerStatus(relayerId).catch((err) => {\n\t\t\t\t\tlogger.warn(\"[Relayer] Failed to fetch status\", err);\n\t\t\t\t\treturn null;\n\t\t\t\t})\n\t\t\t]);\n\t\t\tif (!relayerResponse.data.success || !relayerResponse.data.data) throw new Error(`Failed to fetch relayer details for ID: ${relayerId}`);\n\t\t\tconst relayerData = relayerResponse.data.data;\n\t\t\tconst enhancedDetails = {\n\t\t\t\trelayerId: relayerData.id,\n\t\t\t\tname: relayerData.name,\n\t\t\t\taddress: relayerData.address || \"\",\n\t\t\t\tnetwork: relayerData.network,\n\t\t\t\tpaused: relayerData.paused || false,\n\t\t\t\tsystemDisabled: relayerData.system_disabled || false\n\t\t\t};\n\t\t\tif (balanceResponse?.data?.success && balanceResponse.data.data?.balance) try {\n\t\t\t\tenhancedDetails.balance = `${formatEther(BigInt(balanceResponse.data.data.balance))} ${networkConfig.nativeCurrency.symbol}`;\n\t\t\t} catch (error) {\n\t\t\t\tlogger.warn(\"[Relayer] Failed to format balance, using raw value\", String(error));\n\t\t\t\tenhancedDetails.balance = String(balanceResponse.data.data.balance);\n\t\t\t}\n\t\t\tif (statusResponse?.data?.success && statusResponse.data.data) {\n\t\t\t\tconst statusData = statusResponse.data.data;\n\t\t\t\tif (statusData.network_type === \"evm\") {\n\t\t\t\t\tif (statusData.nonce !== void 0 && statusData.nonce !== null) enhancedDetails.nonce = String(statusData.nonce);\n\t\t\t\t\tif (statusData.pending_transactions_count !== void 0) enhancedDetails.pendingTransactionsCount = statusData.pending_transactions_count;\n\t\t\t\t\tif (statusData.last_confirmed_transaction_timestamp) enhancedDetails.lastConfirmedTransactionTimestamp = statusData.last_confirmed_transaction_timestamp;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlogger.info(\"[Relayer] Retrieved enhanced relayer details\", JSON.stringify(enhancedDetails));\n\t\t\treturn enhancedDetails;\n\t\t} catch (error) {\n\t\t\tlogger.error(\"[Relayer] Failed to get relayer details\", error instanceof Error ? error.message : String(error));\n\t\t\tthrow error;\n\t\t}\n\t}\n\t/**\n\t* Submits a transaction to the relayer service for asynchronous processing.\n\t* @param transactionData The contract write parameters.\n\t* @param executionConfig The relayer-specific execution configuration.\n\t* @param runtimeApiKey The user's session-only API key.\n\t* @returns A promise that resolves to an object containing the transaction ID assigned by the relayer.\n\t*/\n\tasync sendTransactionViaRelayer(transactionData, executionConfig, runtimeApiKey) {\n\t\tconst data = encodeFunctionData({\n\t\t\tabi: transactionData.abi,\n\t\t\tfunctionName: transactionData.functionName,\n\t\t\targs: transactionData.args\n\t\t});\n\t\tconst evmOptions = executionConfig.transactionOptions;\n\t\tconst valueBigint = transactionData.value ?? 0n;\n\t\tlet valueNumber = 0;\n\t\tconst MAX_SAFE = BigInt(Number.MAX_SAFE_INTEGER);\n\t\tif (valueBigint > MAX_SAFE) {\n\t\t\tlogger.warn(\"[Relayer] Value exceeds JS safe integer. Truncating for request.\", valueBigint.toString());\n\t\t\tvalueNumber = Number(MAX_SAFE);\n\t\t} else valueNumber = Number(valueBigint);\n\t\tconst relayerTxRequest = {\n\t\t\tto: transactionData.address,\n\t\t\tdata,\n\t\t\tvalue: valueNumber,\n\t\t\tgas_limit: (() => {\n\t\t\t\tif (typeof evmOptions?.gasLimit === \"number\") return evmOptions.gasLimit;\n\t\t\t\tlogger.warn(\"[Relayer]\", \"No gasLimit provided; using default 210000. Consider setting explicitly.\");\n\t\t\t\treturn 21e4;\n\t\t\t})(),\n\t\t\t...evmOptions?.speed !== void 0 && { speed: evmOptions.speed },\n\t\t\t...evmOptions?.gasPrice !== void 0 && { gas_price: evmOptions.gasPrice },\n\t\t\t...evmOptions?.maxFeePerGas !== void 0 && { max_fee_per_gas: evmOptions.maxFeePerGas },\n\t\t\t...evmOptions?.maxPriorityFeePerGas !== void 0 && { max_priority_fee_per_gas: evmOptions.maxPriorityFeePerGas },\n\t\t\t...evmOptions?.validUntil !== void 0 && { valid_until: evmOptions.validUntil }\n\t\t};\n\t\tconst result = await new RelayersApi(new Configuration({\n\t\t\tbasePath: executionConfig.serviceUrl,\n\t\t\taccessToken: runtimeApiKey\n\t\t})).sendTransaction(executionConfig.relayer.relayerId, relayerTxRequest);\n\t\tif (!result.data.success || !result.data.data?.id) throw new Error(`Relayer API failed to return a transaction ID. Error: ${result.data.error}`);\n\t\treturn { transactionId: result.data.data.id };\n\t}\n\t/**\n\t* Polls the relayer for a transaction's status until it is mined and has a hash, or fails.\n\t* @param relayerId The ID of the relayer processing the transaction.\n\t* @param transactionId The ID of the transaction to poll.\n\t* @param sdkConfig The SDK configuration containing the necessary authentication.\n\t* @returns A promise that resolves to the final transaction hash.\n\t* @throws If the transaction fails or polling times out.\n\t*/\n\tasync pollForTransactionHash(relayerId, transactionId, sdkConfig) {\n\t\tconst relayersApi = new RelayersApi(sdkConfig);\n\t\tconst POLLING_INTERVAL = 2e3;\n\t\tconst POLLING_TIMEOUT = 3e5;\n\t\tconst startTime = Date.now();\n\t\twhile (Date.now() - startTime < POLLING_TIMEOUT) {\n\t\t\tconst { data } = await relayersApi.getTransactionById(relayerId, transactionId);\n\t\t\tif (!data.success || !data.data) throw new Error(`Failed to get transaction status for ID: ${transactionId}`);\n\t\t\tconst txResponse = data.data;\n\t\t\tif (txResponse.status === \"mined\" || txResponse.status === \"confirmed\") {\n\t\t\t\tif (!txResponse.hash) throw new Error(`Transaction is confirmed but no hash was returned for ID: ${transactionId}`);\n\t\t\t\treturn txResponse.hash;\n\t\t\t}\n\t\t\tif (txResponse.status === \"failed\" || txResponse.status === \"canceled\" || txResponse.status === \"expired\") throw new Error(`Transaction ${txResponse.status}: ${txResponse.status_reason || \"No reason provided.\"}`);\n\t\t\tawait new Promise((resolve) => setTimeout(resolve, POLLING_INTERVAL));\n\t\t}\n\t\tthrow new Error(`Polling for transaction hash timed out for ID: ${transactionId}`);\n\t}\n};\n\n//#endregion\nexport { RelayerExecutionStrategy as t };\n//# sourceMappingURL=relayer-D6OROZ3N.mjs.map"],"mappings":";;;;;;;;;;;;;;;;;;AAiBA,IAAI,2BAA2B,MAAM;CACpC,MAAM,QAAQ,iBAAiB,iBAAiB,uBAAuB,gBAAgB,eAAe;EACrG,MAAM,gBAAgB;AACtB,MAAI,CAAC,cAAe,OAAM,IAAI,MAAM,6CAA6C;EACjF,MAAM,EAAE,kBAAkB,MAAM,KAAK,0BAA0B,iBAAiB,eAAe,cAAc;AAC7G,iBAAe,kBAAkB,EAAE,eAAe,CAAC;EACnD,MAAM,YAAY,IAAIA,wCAAc;GACnC,UAAU,cAAc;GACxB,aAAa;GACb,CAAC;AACF,SAAO,EAAE,QAAQ,MAAM,KAAK,uBAAuB,cAAc,QAAQ,WAAW,eAAe,UAAU,EAAE;;;;;;;;;;;;CAYhH,MAAM,eAAe,YAAY,aAAa,eAAe;AAC5D,gCAAO,KAAK,gDAAgD,YAAY,MAAM,GAAG,EAAE,CAAC,OAAO,YAAY,QAAQ,IAAI,CAAC;EACpH,MAAM,cAAc,IAAIC,sCAAY,IAAID,wCAAc;GACrD,UAAU;GACV;GACA,CAAC,CAAC;EACH,IAAI,cAAc,EAAE;EACpB,IAAI,cAAc;EAClB,IAAI,aAAa;EACjB,IAAI,UAAU;AACd,KAAG;GACF,MAAM,EAAE,SAAS,MAAM,YAAY,aAAa,aAAa,IAAI;AACjE,OAAI,CAAC,KAAK,WAAW,CAAC,KAAK,KAAM,OAAM,IAAI,MAAM,oCAAoC,YAAY,GAAG;AACpG,iBAAc,CAAC,GAAG,aAAa,GAAG,KAAK,KAAK;AAC5C,gBAAa,KAAK,YAAY,eAAe;AAC7C,OAAI,YAAY,UAAU,WAAY,WAAU;OAC3C;WACG;AACT,SAAO,YAAY,QAAQ,MAAM,EAAE,iBAAiB,SAAS,cAAc,GAAG,SAAS,EAAE,QAAQ,CAAC,CAAC,KAAK,OAAO;GAC9G,WAAW,EAAE;GACb,MAAM,EAAE;GACR,SAAS,EAAE,WAAW;GACtB,SAAS,EAAE;GACX,QAAQ,EAAE,UAAU;GACpB,EAAE;;;;;;;;;;;;;CAaJ,MAAM,cAAc,YAAY,aAAa,WAAW,eAAe;AACtE,gCAAO,KAAK,2CAA2C,UAAU;EACjE,MAAM,cAAc,IAAIC,sCAAY,IAAID,wCAAc;GACrD,UAAU;GACV;GACA,CAAC,CAAC;AACH,MAAI;GACH,MAAM,CAAC,iBAAiB,iBAAiB,kBAAkB,MAAM,QAAQ,IAAI;IAC5E,YAAY,WAAW,UAAU;IACjC,YAAY,kBAAkB,UAAU,CAAC,OAAO,QAAQ;AACvD,mCAAO,KAAK,qCAAqC,IAAI;AACrD,YAAO;MACN;IACF,YAAY,iBAAiB,UAAU,CAAC,OAAO,QAAQ;AACtD,mCAAO,KAAK,oCAAoC,IAAI;AACpD,YAAO;MACN;IACF,CAAC;AACF,OAAI,CAAC,gBAAgB,KAAK,WAAW,CAAC,gBAAgB,KAAK,KAAM,OAAM,IAAI,MAAM,2CAA2C,YAAY;GACxI,MAAM,cAAc,gBAAgB,KAAK;GACzC,MAAM,kBAAkB;IACvB,WAAW,YAAY;IACvB,MAAM,YAAY;IAClB,SAAS,YAAY,WAAW;IAChC,SAAS,YAAY;IACrB,QAAQ,YAAY,UAAU;IAC9B,gBAAgB,YAAY,mBAAmB;IAC/C;AACD,OAAI,iBAAiB,MAAM,WAAW,gBAAgB,KAAK,MAAM,QAAS,KAAI;AAC7E,oBAAgB,UAAU,yBAAe,OAAO,gBAAgB,KAAK,KAAK,QAAQ,CAAC,CAAC,GAAG,cAAc,eAAe;YAC5G,OAAO;AACf,kCAAO,KAAK,uDAAuD,OAAO,MAAM,CAAC;AACjF,oBAAgB,UAAU,OAAO,gBAAgB,KAAK,KAAK,QAAQ;;AAEpE,OAAI,gBAAgB,MAAM,WAAW,eAAe,KAAK,MAAM;IAC9D,MAAM,aAAa,eAAe,KAAK;AACvC,QAAI,WAAW,iBAAiB,OAAO;AACtC,SAAI,WAAW,UAAU,KAAK,KAAK,WAAW,UAAU,KAAM,iBAAgB,QAAQ,OAAO,WAAW,MAAM;AAC9G,SAAI,WAAW,+BAA+B,KAAK,EAAG,iBAAgB,2BAA2B,WAAW;AAC5G,SAAI,WAAW,qCAAsC,iBAAgB,oCAAoC,WAAW;;;AAGtH,iCAAO,KAAK,gDAAgD,KAAK,UAAU,gBAAgB,CAAC;AAC5F,UAAO;WACC,OAAO;AACf,iCAAO,MAAM,2CAA2C,iBAAiB,QAAQ,MAAM,UAAU,OAAO,MAAM,CAAC;AAC/G,SAAM;;;;;;;;;;CAUR,MAAM,0BAA0B,iBAAiB,iBAAiB,eAAe;EAChF,MAAM,oCAA0B;GAC/B,KAAK,gBAAgB;GACrB,cAAc,gBAAgB;GAC9B,MAAM,gBAAgB;GACtB,CAAC;EACF,MAAM,aAAa,gBAAgB;EACnC,MAAM,cAAc,gBAAgB,SAAS;EAC7C,IAAI,cAAc;EAClB,MAAM,WAAW,OAAO,OAAO,iBAAiB;AAChD,MAAI,cAAc,UAAU;AAC3B,iCAAO,KAAK,oEAAoE,YAAY,UAAU,CAAC;AACvG,iBAAc,OAAO,SAAS;QACxB,eAAc,OAAO,YAAY;EACxC,MAAM,mBAAmB;GACxB,IAAI,gBAAgB;GACpB;GACA,OAAO;GACP,kBAAkB;AACjB,QAAI,OAAO,YAAY,aAAa,SAAU,QAAO,WAAW;AAChE,kCAAO,KAAK,aAAa,2EAA2E;AACpG,WAAO;OACJ;GACJ,GAAG,YAAY,UAAU,KAAK,KAAK,EAAE,OAAO,WAAW,OAAO;GAC9D,GAAG,YAAY,aAAa,KAAK,KAAK,EAAE,WAAW,WAAW,UAAU;GACxE,GAAG,YAAY,iBAAiB,KAAK,KAAK,EAAE,iBAAiB,WAAW,cAAc;GACtF,GAAG,YAAY,yBAAyB,KAAK,KAAK,EAAE,0BAA0B,WAAW,sBAAsB;GAC/G,GAAG,YAAY,eAAe,KAAK,KAAK,EAAE,aAAa,WAAW,YAAY;GAC9E;EACD,MAAM,SAAS,MAAM,IAAIC,sCAAY,IAAID,wCAAc;GACtD,UAAU,gBAAgB;GAC1B,aAAa;GACb,CAAC,CAAC,CAAC,gBAAgB,gBAAgB,QAAQ,WAAW,iBAAiB;AACxE,MAAI,CAAC,OAAO,KAAK,WAAW,CAAC,OAAO,KAAK,MAAM,GAAI,OAAM,IAAI,MAAM,yDAAyD,OAAO,KAAK,QAAQ;AAChJ,SAAO,EAAE,eAAe,OAAO,KAAK,KAAK,IAAI;;;;;;;;;;CAU9C,MAAM,uBAAuB,WAAW,eAAe,WAAW;EACjE,MAAM,cAAc,IAAIC,sCAAY,UAAU;EAC9C,MAAM,mBAAmB;EACzB,MAAM,kBAAkB;EACxB,MAAM,YAAY,KAAK,KAAK;AAC5B,SAAO,KAAK,KAAK,GAAG,YAAY,iBAAiB;GAChD,MAAM,EAAE,SAAS,MAAM,YAAY,mBAAmB,WAAW,cAAc;AAC/E,OAAI,CAAC,KAAK,WAAW,CAAC,KAAK,KAAM,OAAM,IAAI,MAAM,4CAA4C,gBAAgB;GAC7G,MAAM,aAAa,KAAK;AACxB,OAAI,WAAW,WAAW,WAAW,WAAW,WAAW,aAAa;AACvE,QAAI,CAAC,WAAW,KAAM,OAAM,IAAI,MAAM,6DAA6D,gBAAgB;AACnH,WAAO,WAAW;;AAEnB,OAAI,WAAW,WAAW,YAAY,WAAW,WAAW,cAAc,WAAW,WAAW,UAAW,OAAM,IAAI,MAAM,eAAe,WAAW,OAAO,IAAI,WAAW,iBAAiB,wBAAwB;AACpN,SAAM,IAAI,SAAS,YAAY,WAAW,SAAS,iBAAiB,CAAC;;AAEtE,QAAM,IAAI,MAAM,kDAAkD,gBAAgB"}