{"version":3,"file":"erc4626-Tci3OxhB-Bc21Rahh.mjs","names":[],"sources":["../../adapter-evm-core/dist/erc4626-Tci3OxhB.mjs"],"sourcesContent":["import { t as createEvmPublicClient } from \"./public-client-DtJS2A20.mjs\";\nimport { i as resolveRpcUrl } from \"./rpc-BMyYpWRW.mjs\";\nimport { c as guardRuntimeCapability, n as asTypedEvmNetworkConfig, r as assertValidAddress, t as adaptSignAndBroadcast } from \"./helpers-CYDHdjrw.mjs\";\nimport { i as includesAny, n as parseAmount, r as extractRevertInfo, t as formatAmount } from \"./amount-Bd1Whvv5.mjs\";\nimport { t as runCapabilityWrite } from \"./executor-CEYC5o85.mjs\";\nimport { logger } from \"@openzeppelin/ui-utils\";\nimport { InsufficientBalance, InsufficientShares, RICapabilityOperationFailed } from \"@openzeppelin/ui-types\";\n\n//#region src/erc4626/abi.ts\n/** `convertToAssets(uint256 shares) → uint256 assets`. */\nconst CONVERT_TO_ASSETS_ABI = [{\n\ttype: \"function\",\n\tname: \"convertToAssets\",\n\tinputs: [{\n\t\tname: \"shares\",\n\t\ttype: \"uint256\"\n\t}],\n\toutputs: [{\n\t\tname: \"assets\",\n\t\ttype: \"uint256\"\n\t}],\n\tstateMutability: \"view\"\n}];\n/** `convertToShares(uint256 assets) → uint256 shares`. */\nconst CONVERT_TO_SHARES_ABI = [{\n\ttype: \"function\",\n\tname: \"convertToShares\",\n\tinputs: [{\n\t\tname: \"assets\",\n\t\ttype: \"uint256\"\n\t}],\n\toutputs: [{\n\t\tname: \"shares\",\n\t\ttype: \"uint256\"\n\t}],\n\tstateMutability: \"view\"\n}];\n/** `totalAssets() → uint256 totalManagedAssets`. */\nconst TOTAL_ASSETS_ABI = [{\n\ttype: \"function\",\n\tname: \"totalAssets\",\n\tinputs: [],\n\toutputs: [{\n\t\tname: \"totalManagedAssets\",\n\t\ttype: \"uint256\"\n\t}],\n\tstateMutability: \"view\"\n}];\n/** `deposit(uint256 assets, address receiver) → uint256 shares`. */\nconst DEPOSIT_ABI = [{\n\ttype: \"function\",\n\tname: \"deposit\",\n\tinputs: [{\n\t\tname: \"assets\",\n\t\ttype: \"uint256\"\n\t}, {\n\t\tname: \"receiver\",\n\t\ttype: \"address\"\n\t}],\n\toutputs: [{\n\t\tname: \"shares\",\n\t\ttype: \"uint256\"\n\t}],\n\tstateMutability: \"nonpayable\"\n}];\n/**\n* `redeem(uint256 shares, address receiver, address owner) → uint256 assets`.\n*\n* Backs the capability's `withdraw({ from, shares })` — redeeming a share quantity for the\n* underlying assets, with `receiver === owner === from`.\n*/\nconst REDEEM_ABI = [{\n\ttype: \"function\",\n\tname: \"redeem\",\n\tinputs: [\n\t\t{\n\t\t\tname: \"shares\",\n\t\t\ttype: \"uint256\"\n\t\t},\n\t\t{\n\t\t\tname: \"receiver\",\n\t\t\ttype: \"address\"\n\t\t},\n\t\t{\n\t\t\tname: \"owner\",\n\t\t\ttype: \"address\"\n\t\t}\n\t],\n\toutputs: [{\n\t\tname: \"assets\",\n\t\ttype: \"uint256\"\n\t}],\n\tstateMutability: \"nonpayable\"\n}];\n\n//#endregion\n//#region src/erc4626/actions.ts\n/** Assembles `deposit(uint256 assets, address receiver)` with `receiver === from`. */\nfunction assembleDepositAction(vaultAddress, from, assets) {\n\treturn {\n\t\taddress: vaultAddress,\n\t\tabi: DEPOSIT_ABI,\n\t\tfunctionName: \"deposit\",\n\t\targs: [assets, from]\n\t};\n}\n/**\n* Assembles `redeem(uint256 shares, address receiver, address owner)` with\n* `receiver === owner === from` — backs the capability's share-denominated `withdraw`.\n*/\nfunction assembleRedeemAction(vaultAddress, from, shares) {\n\treturn {\n\t\taddress: vaultAddress,\n\t\tabi: REDEEM_ABI,\n\t\tfunctionName: \"redeem\",\n\t\targs: [\n\t\t\tshares,\n\t\t\tfrom,\n\t\t\tfrom\n\t\t]\n\t};\n}\n\n//#endregion\n//#region src/erc4626/error-mapping.ts\n/**\n* Vendored custom-error ABI fragments, decoded when the executor's viem instance did not\n* carry the vault ABI (so `data.errorName` is absent but raw revert bytes are present).\n*\n* Empty by default: when an executor decodes the custom error, its name flows through\n* `data.errorName` without needing this ABI. Extension point — add `{ type: 'error', … }`\n* fragments here (with provenance, like `abi.ts`) to recover names for vaults whose executor\n* strips them.\n*/\nconst CUSTOM_ERROR_ABI = [];\n/**\n* Keyword needles (string reverts + OZ v5 custom-error names) shared by both operations.\n*\n* Deliberately balance/share-specific: a bare `\"insufficient\"` would misclassify unrelated\n* failures (e.g. `ERC20InsufficientAllowance`, slippage/liquidity reverts) as a funds\n* shortfall. Anything not matched here falls through to `RICapabilityOperationFailed`.\n*/\nconst INSUFFICIENT_FUNDS_NEEDLES = [\n\t\"insufficient balance\",\n\t\"insufficient shares\",\n\t\"insufficient assets\",\n\t\"exceeds balance\",\n\t\"exceeds available\",\n\t\"transfer amount exceeds\",\n\t\"burn amount exceeds\",\n\t\"erc20insufficientbalance\"\n];\nconst DEPOSIT_LIMIT_NEEDLES = [\n\t\"exceededmaxdeposit\",\n\t\"exceededmaxmint\",\n\t\"max deposit\"\n];\nconst WITHDRAW_LIMIT_NEEDLES = [\n\t\"exceededmaxwithdraw\",\n\t\"exceededmaxredeem\",\n\t\"max withdraw\",\n\t\"max redeem\"\n];\n/**\n* Map a raw ERC-4626 write failure to a typed error.\n*\n* @param error - The underlying execution error.\n* @param operation - `deposit` or `withdraw` — selects the insufficient-funds error class.\n* @param contractAddress - The vault address for error context.\n* @param ctx - Optional holder/amount details for the typed error.\n*/\nfunction mapErc4626Error(error, operation, contractAddress, ctx = {}) {\n\tconst info = extractRevertInfo(error, CUSTOM_ERROR_ABI);\n\tconst text = info.searchText;\n\tconst { holder, requested } = ctx;\n\tconst limitNeedles = operation === \"deposit\" ? DEPOSIT_LIMIT_NEEDLES : WITHDRAW_LIMIT_NEEDLES;\n\tif (includesAny(text, [...INSUFFICIENT_FUNDS_NEEDLES, ...limitNeedles])) {\n\t\tif (operation === \"deposit\") return new InsufficientBalance(`Insufficient balance for deposit.`, holder ?? \"\", requested ?? \"\", void 0, contractAddress);\n\t\treturn new InsufficientShares(`Insufficient shares for withdraw.`, holder ?? \"\", requested ?? \"\", void 0, contractAddress);\n\t}\n\tconst detail = info.errorName ? ` (custom error: ${info.errorName})` : info.selector ? ` (unrecognized revert selector: ${info.selector})` : \"\";\n\treturn new RICapabilityOperationFailed(`ERC-4626 ${operation} failed: ${error.message}${detail}`, operation, error, contractAddress);\n}\n\n//#endregion\n//#region src/erc4626/onchain-reader.ts\nconst LOG_SYSTEM$1 = \"EvmErc4626Reader\";\n/** Convert a base-unit share quantity to its underlying asset quantity. */\nasync function convertToAssets(rpcUrl, vaultAddress, shares, viemChain) {\n\tconst sharesRaw = parseAmount(shares, vaultAddress);\n\tconst client = createEvmPublicClient(rpcUrl, viemChain);\n\ttry {\n\t\treturn formatAmount(await client.readContract({\n\t\t\taddress: vaultAddress,\n\t\t\tabi: CONVERT_TO_ASSETS_ABI,\n\t\t\tfunctionName: \"convertToAssets\",\n\t\t\targs: [sharesRaw]\n\t\t}), vaultAddress);\n\t} catch (error) {\n\t\tlogger.error(LOG_SYSTEM$1, \"convertToAssets failed:\", error);\n\t\tthrow new RICapabilityOperationFailed(`Failed to convertToAssets: ${error.message}`, \"convertToAssets\", error, vaultAddress);\n\t}\n}\n/** Convert a base-unit asset quantity to its share quantity. */\nasync function convertToShares(rpcUrl, vaultAddress, assets, viemChain) {\n\tconst assetsRaw = parseAmount(assets, vaultAddress);\n\tconst client = createEvmPublicClient(rpcUrl, viemChain);\n\ttry {\n\t\treturn formatAmount(await client.readContract({\n\t\t\taddress: vaultAddress,\n\t\t\tabi: CONVERT_TO_SHARES_ABI,\n\t\t\tfunctionName: \"convertToShares\",\n\t\t\targs: [assetsRaw]\n\t\t}), vaultAddress);\n\t} catch (error) {\n\t\tlogger.error(LOG_SYSTEM$1, \"convertToShares failed:\", error);\n\t\tthrow new RICapabilityOperationFailed(`Failed to convertToShares: ${error.message}`, \"convertToShares\", error, vaultAddress);\n\t}\n}\n/** Total underlying assets managed by the vault, as a base-unit decimal string. */\nasync function totalAssets(rpcUrl, vaultAddress, viemChain) {\n\tconst client = createEvmPublicClient(rpcUrl, viemChain);\n\ttry {\n\t\treturn formatAmount(await client.readContract({\n\t\t\taddress: vaultAddress,\n\t\t\tabi: TOTAL_ASSETS_ABI,\n\t\t\tfunctionName: \"totalAssets\"\n\t\t}), vaultAddress);\n\t} catch (error) {\n\t\tlogger.error(LOG_SYSTEM$1, \"totalAssets failed:\", error);\n\t\tthrow new RICapabilityOperationFailed(`Failed to read totalAssets: ${error.message}`, \"totalAssets\", error, vaultAddress);\n\t}\n}\n\n//#endregion\n//#region src/erc4626/service.ts\nconst LOG_SYSTEM = \"EvmErc4626Service\";\n/**\n* EVM implementation of the ERC-4626 capability surface (sans the `RuntimeCapability` mixin).\n*/\nvar EvmErc4626Service = class {\n\tvaultAddress;\n\tconstructor(networkConfig, executeTransaction, options) {\n\t\tthis.networkConfig = networkConfig;\n\t\tthis.executeTransaction = executeTransaction;\n\t\tthis.vaultAddress = options.vaultAddress;\n\t}\n\tconvertToAssets(shares) {\n\t\treturn convertToAssets(this.rpcUrl(), this.vaultAddress, shares);\n\t}\n\tconvertToShares(assets) {\n\t\treturn convertToShares(this.rpcUrl(), this.vaultAddress, assets);\n\t}\n\ttotalAssets() {\n\t\treturn totalAssets(this.rpcUrl(), this.vaultAddress);\n\t}\n\tasync deposit(input, executionConfig, onStatusChange, runtimeApiKey) {\n\t\tconst assets = parseAmount(input.amount, this.vaultAddress);\n\t\tconst action = assembleDepositAction(this.vaultAddress, input.from, assets);\n\t\treturn this.execute(\"deposit\", action, executionConfig, onStatusChange, runtimeApiKey, {\n\t\t\tholder: input.from,\n\t\t\trequested: input.amount\n\t\t});\n\t}\n\tasync withdraw(input, executionConfig, onStatusChange, runtimeApiKey) {\n\t\tconst shares = parseAmount(input.shares, this.vaultAddress);\n\t\tconst action = assembleRedeemAction(this.vaultAddress, input.from, shares);\n\t\treturn this.execute(\"withdraw\", action, executionConfig, onStatusChange, runtimeApiKey, {\n\t\t\tholder: input.from,\n\t\t\trequested: input.shares\n\t\t});\n\t}\n\tdispose() {\n\t\tlogger.debug(LOG_SYSTEM, \"ERC-4626 service disposed.\");\n\t}\n\trpcUrl() {\n\t\treturn resolveRpcUrl(this.networkConfig);\n\t}\n\tasync execute(operation, action, executionConfig, onStatusChange, runtimeApiKey, errorContext) {\n\t\treturn { id: (await runCapabilityWrite({\n\t\t\toperation,\n\t\t\taction,\n\t\t\texecutor: this.executeTransaction,\n\t\t\texecutionConfig,\n\t\t\tonStatusChange,\n\t\t\truntimeApiKey\n\t\t}, (error, _op, contractAddress) => mapErc4626Error(error, operation, contractAddress, errorContext))).id };\n\t}\n};\n/**\n* Factory for {@link EvmErc4626Service}.\n*/\nfunction createEvmErc4626Service(networkConfig, executeTransaction, options) {\n\treturn new EvmErc4626Service(networkConfig, executeTransaction, options);\n}\n\n//#endregion\n//#region src/capabilities/erc4626.ts\n/**\n* Create the EVM ERC-4626 tokenized-vault capability.\n*\n* Mirrors {@link createERC3643} / {@link createIRS}: assembles the service, adapts the\n* injected `signAndBroadcast` into the service's executor via the shared\n* {@link adaptSignAndBroadcast} helper, and wraps the result with `guardRuntimeCapability`\n* for the `RuntimeCapability` surface and idempotent `dispose()`.\n*/\nfunction createERC4626(config, options) {\n\tconst networkConfig = asTypedEvmNetworkConfig(config);\n\tassertValidAddress(\"vaultAddress\", options.vaultAddress);\n\tconst service = createEvmErc4626Service(networkConfig, adaptSignAndBroadcast(options.signAndBroadcast), { vaultAddress: options.vaultAddress });\n\treturn guardRuntimeCapability(service, networkConfig, \"erc4626\", () => service.dispose(), \"general\");\n}\n\n//#endregion\nexport { mapErc4626Error as i, EvmErc4626Service as n, createEvmErc4626Service as r, createERC4626 as t };\n//# sourceMappingURL=erc4626-Tci3OxhB.mjs.map"],"mappings":"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"}