@dev.sail.money/sailor 0.0.2 → 1.0.0-38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (199) hide show
  1. package/AGENTS.md +43 -15
  2. package/README.md +217 -126
  3. package/examples/permissions/BoundedApproveAndCallBatch.sol +179 -0
  4. package/examples/permissions/BoundedBet_Limitless_Base.sol +8 -7
  5. package/examples/permissions/BoundedBorrow_AaveV3_Arbitrum.sol +13 -13
  6. package/examples/permissions/BoundedPerp_GMXv2_Arbitrum.sol +50 -39
  7. package/examples/permissions/BoundedStake_Venice_Base.sol +85 -0
  8. package/examples/permissions/BoundedSupply_AaveV3_Arbitrum.sol +82 -0
  9. package/examples/permissions/BoundedSwap_UniswapV3_Base.sol +15 -12
  10. package/examples/permissions/BoundedSwap_UniswapV4_Unichain.sol +14 -8
  11. package/examples/permissions/BoundedTransfer_ERC20_Ethereum.sol +6 -6
  12. package/examples/permissions/BoundedVault_ERC4626_Base.sol +97 -0
  13. package/examples/permissions/README.md +29 -2
  14. package/examples/permissions/SailCalldata.sol +118 -0
  15. package/examples/permissions/interfaces/IBatchPermission.sol +38 -0
  16. package/package.json +17 -12
  17. package/packages/cli/dist/index.cjs +4164 -2508
  18. package/packages/cli/dist/server.cjs +897 -1566
  19. package/packages/sdk/dist/chains.d.ts +12 -0
  20. package/packages/sdk/dist/chains.d.ts.map +1 -0
  21. package/packages/sdk/dist/chains.js +94 -0
  22. package/packages/sdk/dist/chains.js.map +1 -0
  23. package/packages/sdk/dist/deployments.d.ts +14 -7
  24. package/packages/sdk/dist/deployments.d.ts.map +1 -1
  25. package/packages/sdk/dist/deployments.js +132 -141
  26. package/packages/sdk/dist/deployments.js.map +1 -1
  27. package/packages/sdk/dist/index.d.ts +3 -2
  28. package/packages/sdk/dist/index.d.ts.map +1 -1
  29. package/packages/sdk/dist/index.js +3 -2
  30. package/packages/sdk/dist/index.js.map +1 -1
  31. package/packages/sdk/dist/intelligence.d.ts +1 -1
  32. package/packages/sdk/dist/intelligence.js +1 -1
  33. package/packages/sdk/dist/lifi.d.ts +17 -0
  34. package/packages/sdk/dist/lifi.d.ts.map +1 -1
  35. package/packages/sdk/dist/lifi.js +24 -0
  36. package/packages/sdk/dist/lifi.js.map +1 -1
  37. package/packages/sdk/dist/safe.d.ts +83 -0
  38. package/packages/sdk/dist/safe.d.ts.map +1 -1
  39. package/packages/sdk/dist/safe.js +92 -1
  40. package/packages/sdk/dist/safe.js.map +1 -1
  41. package/packages/sdk/dist/templates/ammLiquidity.d.ts +24 -11
  42. package/packages/sdk/dist/templates/ammLiquidity.d.ts.map +1 -1
  43. package/packages/sdk/dist/templates/ammLiquidity.js +39 -31
  44. package/packages/sdk/dist/templates/ammLiquidity.js.map +1 -1
  45. package/packages/sdk/dist/templates/approveAndCallBatch.d.ts +24 -10
  46. package/packages/sdk/dist/templates/approveAndCallBatch.d.ts.map +1 -1
  47. package/packages/sdk/dist/templates/approveAndCallBatch.js +36 -23
  48. package/packages/sdk/dist/templates/approveAndCallBatch.js.map +1 -1
  49. package/packages/sdk/dist/templates/boundedBorrow.d.ts +19 -9
  50. package/packages/sdk/dist/templates/boundedBorrow.d.ts.map +1 -1
  51. package/packages/sdk/dist/templates/boundedBorrow.js +28 -19
  52. package/packages/sdk/dist/templates/boundedBorrow.js.map +1 -1
  53. package/packages/sdk/dist/templates/boundedSwap.d.ts +19 -9
  54. package/packages/sdk/dist/templates/boundedSwap.d.ts.map +1 -1
  55. package/packages/sdk/dist/templates/boundedSwap.js +30 -20
  56. package/packages/sdk/dist/templates/boundedSwap.js.map +1 -1
  57. package/packages/sdk/dist/templates/defiBundle.d.ts +35 -9
  58. package/packages/sdk/dist/templates/defiBundle.d.ts.map +1 -1
  59. package/packages/sdk/dist/templates/defiBundle.js +84 -22
  60. package/packages/sdk/dist/templates/defiBundle.js.map +1 -1
  61. package/packages/sdk/dist/templates/pendle.d.ts +23 -8
  62. package/packages/sdk/dist/templates/pendle.d.ts.map +1 -1
  63. package/packages/sdk/dist/templates/pendle.js +34 -14
  64. package/packages/sdk/dist/templates/pendle.js.map +1 -1
  65. package/packages/sdk/dist/templates/transferTarget.d.ts +11 -3
  66. package/packages/sdk/dist/templates/transferTarget.d.ts.map +1 -1
  67. package/packages/sdk/dist/templates/transferTarget.js +14 -7
  68. package/packages/sdk/dist/templates/transferTarget.js.map +1 -1
  69. package/packages/sdk/dist/types.d.ts +19 -1
  70. package/packages/sdk/dist/types.d.ts.map +1 -1
  71. package/packages/sdk/package.json +28 -0
  72. package/packages/ui/dist/assets/{add-DaJhwIBV.js → add-Dl1etsL9.js} +1 -1
  73. package/packages/ui/dist/assets/{all-wallets-BUxsqWXi.js → all-wallets-C0eHLOGG.js} +1 -1
  74. package/packages/ui/dist/assets/{app-store-DkltwTqE.js → app-store-B-VMDEZ3.js} +1 -1
  75. package/packages/ui/dist/assets/{apple-owVOeaIT.js → apple-DkDXzKns.js} +1 -1
  76. package/packages/ui/dist/assets/{arrow-bottom-D2mmNJve.js → arrow-bottom-DtPzuS76.js} +1 -1
  77. package/packages/ui/dist/assets/{arrow-bottom-circle-CbNYijx-.js → arrow-bottom-circle-D7odSAO8.js} +1 -1
  78. package/packages/ui/dist/assets/{arrow-left-DJB61s4C.js → arrow-left-zJV9tpx0.js} +1 -1
  79. package/packages/ui/dist/assets/{arrow-right-BBrsQ9R4.js → arrow-right-BOREfe7o.js} +1 -1
  80. package/packages/ui/dist/assets/{arrow-top-Cil6bOc8.js → arrow-top-CipQc3Af.js} +1 -1
  81. package/packages/ui/dist/assets/{bank-CbwEmRo3.js → bank-C5s7eoV5.js} +1 -1
  82. package/packages/ui/dist/assets/{basic-CLNfjw3m.js → basic-D2es4Vq8.js} +1 -1
  83. package/packages/ui/dist/assets/{browser-B5TtF4Pb.js → browser-DITQWDC9.js} +1 -1
  84. package/packages/ui/dist/assets/{card-CO7BVB-C.js → card-C3DDkaYK.js} +1 -1
  85. package/packages/ui/dist/assets/{ccip-2W7K3_J3.js → ccip-UBXL3JiN.js} +1 -1
  86. package/packages/ui/dist/assets/{checkmark-bold-D9xGHzPE.js → checkmark-bold-D8yW0_K_.js} +1 -1
  87. package/packages/ui/dist/assets/{checkmark-BEtSHq9m.js → checkmark-ngef3MAl.js} +1 -1
  88. package/packages/ui/dist/assets/{chevron-bottom-BDztht6i.js → chevron-bottom-C56BipDR.js} +1 -1
  89. package/packages/ui/dist/assets/{chevron-left-EV4GFNbc.js → chevron-left-BmIPtPl_.js} +1 -1
  90. package/packages/ui/dist/assets/{chevron-right-B4_bB9oR.js → chevron-right-BnySHQ8h.js} +1 -1
  91. package/packages/ui/dist/assets/{chevron-top-D54xPNzF.js → chevron-top-BDGZnNW3.js} +1 -1
  92. package/packages/ui/dist/assets/{chrome-store-DYUpAJJq.js → chrome-store-BYIqJZVF.js} +1 -1
  93. package/packages/ui/dist/assets/{clock-Ca1T1Soz.js → clock-Bl4mUHAM.js} +1 -1
  94. package/packages/ui/dist/assets/{close-BZqWjurK.js → close-B9rhEX6U.js} +1 -1
  95. package/packages/ui/dist/assets/{coinPlaceholder-e6fl2XDo.js → coinPlaceholder-1cO0FQsl.js} +1 -1
  96. package/packages/ui/dist/assets/{compass-DCLC7zIh.js → compass-7i-VuXu2.js} +1 -1
  97. package/packages/ui/dist/assets/{copy-Th2AaD-O.js → copy-OqqXix2J.js} +1 -1
  98. package/packages/ui/dist/assets/{core-Ckx_cyuH.js → core-tX9kIIDJ.js} +3 -3
  99. package/packages/ui/dist/assets/cursor-BoyeQ9fN.js +3 -0
  100. package/packages/ui/dist/assets/{cursor-transparent-BKHeABKB.js → cursor-transparent-5aoRH67u.js} +1 -1
  101. package/packages/ui/dist/assets/{desktop-CBjY8t6F.js → desktop-BaPXK9R6.js} +1 -1
  102. package/packages/ui/dist/assets/{disconnect-DbSs2cli.js → disconnect-LlK5K1CF.js} +1 -1
  103. package/packages/ui/dist/assets/{discord-ZlLOAUkM.js → discord-BdcQNWY_.js} +1 -1
  104. package/packages/ui/dist/assets/{etherscan-CKUrqWYN.js → etherscan-Bb-WxpO1.js} +1 -1
  105. package/packages/ui/dist/assets/{events-CiKP71cK.js → events-DjdZr6no.js} +1 -1
  106. package/packages/ui/dist/assets/{exclamation-triangle-DA1QzFiO.js → exclamation-triangle-COx4VtPV.js} +1 -1
  107. package/packages/ui/dist/assets/{extension-BVJkmvpJ.js → extension-DF63DTWO.js} +1 -1
  108. package/packages/ui/dist/assets/{external-link-D_bsR7B2.js → external-link-DyghCkQu.js} +1 -1
  109. package/packages/ui/dist/assets/{facebook-CmFmhojx.js → facebook-Dcg4bZMR.js} +1 -1
  110. package/packages/ui/dist/assets/{fallback-Ofl6uSnB.js → fallback-DJIr_fH3.js} +1 -1
  111. package/packages/ui/dist/assets/{farcaster-Co-M3Ss8.js → farcaster-BkmV5HjO.js} +1 -1
  112. package/packages/ui/dist/assets/{filters-B1WwNaFU.js → filters-DLHj1T_P.js} +1 -1
  113. package/packages/ui/dist/assets/{github-CP4fP6gn.js → github-BFDCgKrF.js} +1 -1
  114. package/packages/ui/dist/assets/{google-CsOIXJ6V.js → google-C08SpmIy.js} +1 -1
  115. package/packages/ui/dist/assets/{help-circle-DiMkomdF.js → help-circle-DU1IFmWp.js} +1 -1
  116. package/packages/ui/dist/assets/{id-lmscL5LX.js → id-DtDRGf3L.js} +1 -1
  117. package/packages/ui/dist/assets/{image-B-ubJrY5.js → image-CgCXJEjT.js} +1 -1
  118. package/packages/ui/dist/assets/{index-Dbh5V1Z0.js → index-8chM4S5Y.js} +1 -1
  119. package/packages/ui/dist/assets/{index-BaukYv-x.js → index-B5sCtNuq.js} +1 -1
  120. package/packages/ui/dist/assets/{index-CF0KMmke.js → index-BBfBEazf.js} +3 -3
  121. package/packages/ui/dist/assets/{index-CZR1Qjhs.js → index-BhXPwltt.js} +1 -1
  122. package/packages/ui/dist/assets/index-Cm05Py20.css +1 -0
  123. package/packages/ui/dist/assets/{index-DVgfCzCo.js → index-D37bD6Yt.js} +1 -1
  124. package/packages/ui/dist/assets/index-DZfBh-cg.js +1775 -0
  125. package/packages/ui/dist/assets/{index.es-C78cE5SI.js → index.es-BEcNQEn-.js} +4 -4
  126. package/packages/ui/dist/assets/{info-Cqg57EVo.js → info-ClsdYA4P.js} +1 -1
  127. package/packages/ui/dist/assets/{info-circle-DkeSWNKV.js → info-circle-DJmn4Bsv.js} +1 -1
  128. package/packages/ui/dist/assets/{lightbulb-DNlO4qKh.js → lightbulb-CXSftjXS.js} +1 -1
  129. package/packages/ui/dist/assets/{mail-kVQ8Jb9Y.js → mail-cdYKOl9P.js} +1 -1
  130. package/packages/ui/dist/assets/{metamask-sdk-CBalSvz7.js → metamask-sdk-Co3aIEln.js} +1 -1
  131. package/packages/ui/dist/assets/{mobile-BEteuhF7.js → mobile-DEHYlk8L.js} +1 -1
  132. package/packages/ui/dist/assets/{more-DBWmXQli.js → more-Cq_fo8pI.js} +1 -1
  133. package/packages/ui/dist/assets/{network-placeholder-Dg1uUHiL.js → network-placeholder-_dLCK4xB.js} +1 -1
  134. package/packages/ui/dist/assets/{nftPlaceholder-i3AHSiD9.js → nftPlaceholder-Dz4HKEr4.js} +1 -1
  135. package/packages/ui/dist/assets/{off-BtMm0fi2.js → off-B1k1lhkr.js} +1 -1
  136. package/packages/ui/dist/assets/{parseSignature-Cb5FlWWg.js → parseSignature-Cr0ptV2X.js} +1 -1
  137. package/packages/ui/dist/assets/{play-store-iKKkXa6a.js → play-store-lYqe4eeL.js} +1 -1
  138. package/packages/ui/dist/assets/{plus-CA5NaRtb.js → plus-QMgh1krr.js} +1 -1
  139. package/packages/ui/dist/assets/{qr-code-D2kiqR7h.js → qr-code-ClVHbZWN.js} +1 -1
  140. package/packages/ui/dist/assets/{recycle-horizontal-Dcme7R03.js → recycle-horizontal-CxGYnWid.js} +1 -1
  141. package/packages/ui/dist/assets/{refresh-Dega3sDp.js → refresh-CPysMza_.js} +1 -1
  142. package/packages/ui/dist/assets/{reown-logo-xNkksyWJ.js → reown-logo-OoL_zJd0.js} +1 -1
  143. package/packages/ui/dist/assets/{search-HYl7NO8x.js → search-2GaRbf1I.js} +1 -1
  144. package/packages/ui/dist/assets/{secp256k1-Cxd6_SiH.js → secp256k1-BrB8qSSy.js} +1 -1
  145. package/packages/ui/dist/assets/{send-CJU8CUAo.js → send-CC2UuIfD.js} +1 -1
  146. package/packages/ui/dist/assets/{swapHorizontal-IMUKiUre.js → swapHorizontal-BRqYwsqT.js} +1 -1
  147. package/packages/ui/dist/assets/{swapHorizontalBold-CNYnNJ9-.js → swapHorizontalBold-Bj0GSRq9.js} +1 -1
  148. package/packages/ui/dist/assets/{swapHorizontalMedium-B9VxEYsT.js → swapHorizontalMedium-oLOjpU2A.js} +1 -1
  149. package/packages/ui/dist/assets/{swapHorizontalRoundedBold-Dz33l_Jh.js → swapHorizontalRoundedBold-TJ652QXb.js} +1 -1
  150. package/packages/ui/dist/assets/{swapVertical-CHUmjVJ0.js → swapVertical-e0NLyV3x.js} +1 -1
  151. package/packages/ui/dist/assets/{telegram-kl9S2mbU.js → telegram-WhJHVeoU.js} +1 -1
  152. package/packages/ui/dist/assets/{three-dots-U5lhA1Am.js → three-dots-BlBAOyW-.js} +1 -1
  153. package/packages/ui/dist/assets/{twitch-KTEUWXEp.js → twitch-BH7vWmPc.js} +1 -1
  154. package/packages/ui/dist/assets/{twitterIcon-BHiq8mRg.js → twitterIcon-As0Nkanp.js} +1 -1
  155. package/packages/ui/dist/assets/{verify-CfN-BXNd.js → verify-BEJ0QuLl.js} +1 -1
  156. package/packages/ui/dist/assets/{verify-filled-DwZccetj.js → verify-filled-B8Ww2N7z.js} +1 -1
  157. package/packages/ui/dist/assets/{w3m-modal-CS-PFqPE.js → w3m-modal-5rOSZgOR.js} +1 -1
  158. package/packages/ui/dist/assets/{wallet-DVlGkhOY.js → wallet-CAfC3aml.js} +1 -1
  159. package/packages/ui/dist/assets/{wallet-placeholder-CvR_iEWX.js → wallet-placeholder-4RZI464Z.js} +1 -1
  160. package/packages/ui/dist/assets/{walletconnect-8pZBDvVI.js → walletconnect-BiltKqAe.js} +1 -1
  161. package/packages/ui/dist/assets/{warning-circle-ylLEE0Yp.js → warning-circle-CI4jqpHo.js} +1 -1
  162. package/packages/ui/dist/assets/{x-C_TBsTMj.js → x-FBttjBWO.js} +1 -1
  163. package/packages/ui/dist/index.html +2 -2
  164. package/scripts/check-init.mjs +2 -3
  165. package/templates/custom-mandate/README.md +31 -0
  166. package/templates/custom-mandate/mandates/BoundedCallPermission.sol +8 -2
  167. package/templates/custom-mandate/mandates/SailCalldata.sol +118 -0
  168. package/templates/default/.env.example +20 -0
  169. package/templates/{dca-rebalancer → default}/.github/workflows/agent-tick.yml +8 -7
  170. package/templates/{dca-rebalancer → default}/.sail/config.json +2 -2
  171. package/templates/default/AGENTS.md +171 -0
  172. package/templates/default/README.md +16 -0
  173. package/templates/default/examples/dca/README.md +16 -0
  174. package/templates/default/examples/dca/agent.ts +174 -0
  175. package/templates/{dca-rebalancer/src → default/examples/dca}/mandate.ts +9 -31
  176. package/templates/{dca-rebalancer → default}/package.json +2 -2
  177. package/templates/default/src/agent.ts +37 -0
  178. package/templates/default/src/config.ts +24 -0
  179. package/templates/default/src/mandate.ts +22 -0
  180. package/templates/default/tsconfig.json +17 -0
  181. package/templates/lifi-permissions/README.md +1 -1
  182. package/packages/ui/dist/assets/cursor-DV7rOqbJ.js +0 -3
  183. package/packages/ui/dist/assets/index-CKxgNxS9.css +0 -1
  184. package/packages/ui/dist/assets/index-Q2Yai4Fe.js +0 -2103
  185. package/scripts/postinstall.js +0 -366
  186. package/templates/dca-rebalancer/.env.example +0 -6
  187. package/templates/dca-rebalancer/AGENTS.md +0 -246
  188. package/templates/dca-rebalancer/AGENT_PLAYBOOK.md +0 -110
  189. package/templates/dca-rebalancer/README.md +0 -16
  190. package/templates/dca-rebalancer/src/agent.ts +0 -253
  191. package/templates/dca-rebalancer/src/config.ts +0 -27
  192. package/templates/dca-rebalancer/tsconfig.json +0 -8
  193. /package/templates/{dca-rebalancer → default}/.cursor/rules +0 -0
  194. /package/templates/{dca-rebalancer → default}/.sail/.gitkeep +0 -0
  195. /package/templates/{dca-rebalancer → default}/.sail/README.md +0 -0
  196. /package/templates/{dca-rebalancer → default}/CLAUDE.md +0 -0
  197. /package/templates/{dca-rebalancer → default}/_gitignore +0 -0
  198. /package/templates/{dca-rebalancer → default}/docs/PERMISSION_MODEL.md +0 -0
  199. /package/templates/{dca-rebalancer → default}/ui/README.md +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"approveAndCallBatch.js","sourceRoot":"","sources":["../../src/templates/approveAndCallBatch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAehE,MAAM,GAAG,GAAG;IACV,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,WAAW,EAAE;IAC9C,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE;IAC5C,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,SAAS,EAAE;IAChD,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,MAAM,EAAE;CACxC,CAAC;AAEX,MAAM,CAAC,MAAM,2BAA2B,GAAkD;IACxF,IAAI,EAAE,qCAAqC;IAC3C,OAAO,EAAE,4CAA4C;IAErD,OAAO,EAAE;QACP,MAAM,CAAC,MAAiC;YACtC,OAAO,mBAAmB,CAAC,GAAG,EAAE;gBAC9B,MAAM,CAAC,eAAe;gBACtB,MAAM,CAAC,aAAa;gBACpB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;gBAC9C,MAAM,CAAC,sBAAsB;aAC9B,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,IAAS;YACd,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC/C,OAAO;gBACL,eAAe,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAChC,aAAa,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC9B,mBAAmB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACvC,sBAAsB,EAAE,OAAO,CAAC,CAAC,CAAC;aACnC,CAAC;QACJ,CAAC;KACF;IAED,SAAS,EAAE;QACT,OAAO,CAAC,MAAiC;YACvC,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,IAAI,MAAM,CAAC,sBAAsB,EAAE,CAAC;gBAClC,QAAQ,CAAC,IAAI,CACX,gFAAgF,CACjF,CAAC;YACJ,CAAC;YACD,IAAI,MAAM,CAAC,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACxC,QAAQ,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAC;YACzE,CAAC;YACD,OAAO;gBACL,YAAY,EAAE,qCAAqC;gBACnD,aAAa,EAAE;oBACb,kCAAkC,MAAM,CAAC,eAAe,CAAC,MAAM,sBAAsB;oBACrF,mBAAmB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACpD,sCAAsC,MAAM,CAAC,mBAAmB,CAAC,cAAc,EAAE,MAAM;oBACvF,uBAAuB,MAAM,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,aAAa,EAAE;oBAClF,sBAAsB,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBAC1D;gBACD,QAAQ;aACT,CAAC;QACJ,CAAC;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"approveAndCallBatch.js","sourceRoot":"","sources":["../../src/templates/approveAndCallBatch.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,26 @@
1
1
  import type { Address, PermissionTemplate } from "../types.js";
2
- /** Params for SharedBoundedBorrowPermission. */
2
+ /**
3
+ * Params for SharedBoundedBorrowPermission.
4
+ *
5
+ * Matches the on-chain `_applyConfig` decode exactly:
6
+ * abi.decode(params, (address[], address[], uint256, uint256, address, address, uint256))
7
+ * → protocols, assets, maxAmountPerTx, maxLtvBps, collateralOracle, borrowOracle, maxPriceAgeSec
8
+ */
3
9
  export type BoundedBorrowParams = {
4
- /** Maximum borrow amount in USD-equivalent (18-decimal WAD). */
5
- maxBorrowValueUsd: number;
10
+ /** Lending-protocol contract addresses the agent may call (Aave V3 / Morpho / Compound). */
11
+ protocols: Address[];
12
+ /** Allowed borrow asset addresses. */
13
+ assets: Address[];
14
+ /** Maximum borrow amount of a single tx, in the asset's base units. */
15
+ maxAmountPerTx: bigint;
6
16
  /** Maximum resulting LTV in basis points (e.g. 7500 = 75%). */
7
17
  maxLtvBps: number;
8
- /** Allowed collateral token addresses. */
9
- allowedCollateralTokens: Address[];
10
- /** Allowed debt token addresses. */
11
- allowedDebtTokens: Address[];
12
- /** Protocol identifiers allowed (e.g. ["aaveV3", "morpho"]). */
13
- allowedProtocols: string[];
18
+ /** Oracle pricing the collateral asset; `address(0)` disables the LTV check. */
19
+ collateralOracle: Address;
20
+ /** Oracle pricing the borrow asset; `address(0)` disables the LTV check. */
21
+ borrowOracle: Address;
22
+ /** Maximum oracle price age in seconds. Must be > 0 when both oracles are set. */
23
+ maxPriceAgeSec: number;
14
24
  };
15
25
  export declare const boundedBorrowTemplate: PermissionTemplate<BoundedBorrowParams>;
16
26
  //# sourceMappingURL=boundedBorrow.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"boundedBorrow.d.ts","sourceRoot":"","sources":["../../src/templates/boundedBorrow.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA2B,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAExF,gDAAgD;AAChD,MAAM,MAAM,mBAAmB,GAAG;IAChC,gEAAgE;IAChE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,uBAAuB,EAAE,OAAO,EAAE,CAAC;IACnC,oCAAoC;IACpC,iBAAiB,EAAE,OAAO,EAAE,CAAC;IAC7B,gEAAgE;IAChE,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC;AAUF,eAAO,MAAM,qBAAqB,EAAE,kBAAkB,CAAC,mBAAmB,CAgDzE,CAAC"}
1
+ {"version":3,"file":"boundedBorrow.d.ts","sourceRoot":"","sources":["../../src/templates/boundedBorrow.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA2B,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAExF;;;;;;GAMG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,4FAA4F;IAC5F,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,sCAAsC;IACtC,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,uEAAuE;IACvE,cAAc,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,SAAS,EAAE,MAAM,CAAC;IAClB,gFAAgF;IAChF,gBAAgB,EAAE,OAAO,CAAC;IAC1B,4EAA4E;IAC5E,YAAY,EAAE,OAAO,CAAC;IACtB,kFAAkF;IAClF,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAcF,eAAO,MAAM,qBAAqB,EAAE,kBAAkB,CAAC,mBAAmB,CAsDzE,CAAC"}
@@ -1,32 +1,39 @@
1
1
  import { decodeAbiParameters, encodeAbiParameters } from "viem";
2
2
  const ABI = [
3
- { name: "maxBorrowValueUsd", type: "uint256" },
3
+ { name: "protocols", type: "address[]" },
4
+ { name: "assets", type: "address[]" },
5
+ { name: "maxAmountPerTx", type: "uint256" },
4
6
  { name: "maxLtvBps", type: "uint256" },
5
- { name: "allowedCollateralTokens", type: "address[]" },
6
- { name: "allowedDebtTokens", type: "address[]" },
7
- { name: "allowedProtocols", type: "string[]" },
7
+ { name: "collateralOracle", type: "address" },
8
+ { name: "borrowOracle", type: "address" },
9
+ { name: "maxPriceAgeSec", type: "uint256" },
8
10
  ];
11
+ const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";
9
12
  export const boundedBorrowTemplate = {
10
13
  name: "SharedBoundedBorrowPermission",
11
14
  address: "0x0000000000000000000000000000000000000000",
12
15
  encoder: {
13
16
  encode(params) {
14
17
  return encodeAbiParameters(ABI, [
15
- BigInt(Math.round(params.maxBorrowValueUsd)),
18
+ params.protocols,
19
+ params.assets,
20
+ params.maxAmountPerTx,
16
21
  BigInt(params.maxLtvBps),
17
- params.allowedCollateralTokens,
18
- params.allowedDebtTokens,
19
- params.allowedProtocols,
22
+ params.collateralOracle,
23
+ params.borrowOracle,
24
+ BigInt(params.maxPriceAgeSec),
20
25
  ]);
21
26
  },
22
27
  decode(data) {
23
28
  const decoded = decodeAbiParameters(ABI, data);
24
29
  return {
25
- maxBorrowValueUsd: Number(decoded[0]),
26
- maxLtvBps: Number(decoded[1]),
27
- allowedCollateralTokens: [...decoded[2]],
28
- allowedDebtTokens: [...decoded[3]],
29
- allowedProtocols: [...decoded[4]],
30
+ protocols: [...decoded[0]],
31
+ assets: [...decoded[1]],
32
+ maxAmountPerTx: decoded[2],
33
+ maxLtvBps: Number(decoded[3]),
34
+ collateralOracle: decoded[4],
35
+ borrowOracle: decoded[5],
36
+ maxPriceAgeSec: Number(decoded[6]),
30
37
  };
31
38
  },
32
39
  },
@@ -36,17 +43,19 @@ export const boundedBorrowTemplate = {
36
43
  if (params.maxLtvBps > 8000) {
37
44
  warnings.push(`High LTV cap: ${params.maxLtvBps / 100}% — liquidation risk is elevated`);
38
45
  }
39
- if (params.maxBorrowValueUsd > 50_000) {
40
- warnings.push(`High borrow limit: $${params.maxBorrowValueUsd.toLocaleString()}`);
46
+ if (params.collateralOracle === ZERO_ADDRESS || params.borrowOracle === ZERO_ADDRESS) {
47
+ warnings.push("LTV not enforced — both collateral and borrow oracles must be set");
41
48
  }
42
49
  return {
43
50
  templateName: "SharedBoundedBorrowPermission",
44
51
  humanReadable: [
45
- `Maximum borrow size: $${params.maxBorrowValueUsd.toLocaleString()} USD`,
52
+ `Maximum borrow per tx: ${params.maxAmountPerTx.toString()} (asset base units)`,
46
53
  `Maximum LTV: ${params.maxLtvBps / 100}%`,
47
- `Allowed collateral tokens: ${params.allowedCollateralTokens.join(", ")}`,
48
- `Allowed debt tokens: ${params.allowedDebtTokens.join(", ")}`,
49
- `Allowed protocols: ${params.allowedProtocols.join(", ")}`,
54
+ `Allowed protocols: ${params.protocols.join(", ")}`,
55
+ `Allowed assets: ${params.assets.join(", ")}`,
56
+ `Collateral oracle: ${params.collateralOracle}`,
57
+ `Borrow oracle: ${params.borrowOracle}`,
58
+ `Max oracle price age: ${params.maxPriceAgeSec}s`,
50
59
  ],
51
60
  warnings,
52
61
  };
@@ -1 +1 @@
1
- {"version":3,"file":"boundedBorrow.js","sourceRoot":"","sources":["../../src/templates/boundedBorrow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAiBhE,MAAM,GAAG,GAAG;IACV,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,SAAS,EAAE;IAC9C,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE;IACtC,EAAE,IAAI,EAAE,yBAAyB,EAAE,IAAI,EAAE,WAAW,EAAE;IACtD,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,WAAW,EAAE;IAChD,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,UAAU,EAAE;CACtC,CAAC;AAEX,MAAM,CAAC,MAAM,qBAAqB,GAA4C;IAC5E,IAAI,EAAE,+BAA+B;IACrC,OAAO,EAAE,4CAA4C;IAErD,OAAO,EAAE;QACP,MAAM,CAAC,MAA2B;YAChC,OAAO,mBAAmB,CAAC,GAAG,EAAE;gBAC9B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;gBAC5C,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;gBACxB,MAAM,CAAC,uBAAuB;gBAC9B,MAAM,CAAC,iBAAiB;gBACxB,MAAM,CAAC,gBAAgB;aACxB,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,IAAS;YACd,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC/C,OAAO;gBACL,iBAAiB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACrC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC7B,uBAAuB,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACxC,iBAAiB,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAClC,gBAAgB,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;aAClC,CAAC;QACJ,CAAC;KACF;IAED,SAAS,EAAE;QACT,OAAO,CAAC,MAA2B;YACjC,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,IAAI,MAAM,CAAC,SAAS,GAAG,IAAI,EAAE,CAAC;gBAC5B,QAAQ,CAAC,IAAI,CAAC,iBAAiB,MAAM,CAAC,SAAS,GAAG,GAAG,kCAAkC,CAAC,CAAC;YAC3F,CAAC;YACD,IAAI,MAAM,CAAC,iBAAiB,GAAG,MAAM,EAAE,CAAC;gBACtC,QAAQ,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,iBAAiB,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YACpF,CAAC;YACD,OAAO;gBACL,YAAY,EAAE,+BAA+B;gBAC7C,aAAa,EAAE;oBACb,yBAAyB,MAAM,CAAC,iBAAiB,CAAC,cAAc,EAAE,MAAM;oBACxE,gBAAgB,MAAM,CAAC,SAAS,GAAG,GAAG,GAAG;oBACzC,8BAA8B,MAAM,CAAC,uBAAuB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACzE,wBAAwB,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBAC7D,sBAAsB,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBAC3D;gBACD,QAAQ;aACT,CAAC;QACJ,CAAC;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"boundedBorrow.js","sourceRoot":"","sources":["../../src/templates/boundedBorrow.ts"],"names":[],"mappings":"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"}
@@ -1,16 +1,26 @@
1
1
  import type { Address, PermissionTemplate } from "../types.js";
2
- /** Params for SharedBoundedSwapPermission. */
2
+ /**
3
+ * Params for SharedBoundedSwapPermission.
4
+ *
5
+ * Matches the on-chain `_applyConfig` decode exactly:
6
+ * abi.decode(params, (address[], address[], uint256, uint256, address, uint256))
7
+ * → routers, tokensIn, tokensOut, maxAmountPerTx, maxSlippageBps, priceOracle, maxPriceAgeSec
8
+ */
3
9
  export type BoundedSwapParams = {
4
- /** Maximum value of a single swap in USD-equivalent (18-decimal WAD). */
5
- maxSwapValueUsd: number;
6
- /** Maximum allowed slippage in basis points (e.g. 50 = 0.5%). */
7
- maxSlippageBps: number;
10
+ /** Router/aggregator addresses the agent may call (e.g. Uniswap V3 SwapRouter). */
11
+ routers: Address[];
8
12
  /** Token addresses allowed as swap input. */
9
- allowedInputTokens: Address[];
13
+ tokensIn: Address[];
10
14
  /** Token addresses allowed as swap output. */
11
- allowedOutputTokens: Address[];
12
- /** Protocol identifiers allowed (e.g. ["uniswapV3", "curve"]). */
13
- allowedProtocols: string[];
15
+ tokensOut: Address[];
16
+ /** Maximum input amount of a single swap, in the input token's base units. */
17
+ maxAmountPerTx: bigint;
18
+ /** Maximum allowed slippage in basis points (e.g. 50 = 0.5%). */
19
+ maxSlippageBps: number;
20
+ /** Price oracle used for the slippage check; `address(0)` disables it. */
21
+ priceOracle: Address;
22
+ /** Maximum oracle price age in seconds. Must be > 0 when `priceOracle` is set. */
23
+ maxPriceAgeSec: number;
14
24
  };
15
25
  export declare const boundedSwapTemplate: PermissionTemplate<BoundedSwapParams>;
16
26
  //# sourceMappingURL=boundedSwap.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"boundedSwap.d.ts","sourceRoot":"","sources":["../../src/templates/boundedSwap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA2B,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAExF,8CAA8C;AAC9C,MAAM,MAAM,iBAAiB,GAAG;IAC9B,yEAAyE;IACzE,eAAe,EAAE,MAAM,CAAC;IACxB,iEAAiE;IACjE,cAAc,EAAE,MAAM,CAAC;IACvB,6CAA6C;IAC7C,kBAAkB,EAAE,OAAO,EAAE,CAAC;IAC9B,8CAA8C;IAC9C,mBAAmB,EAAE,OAAO,EAAE,CAAC;IAC/B,kEAAkE;IAClE,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B,CAAC;AAUF,eAAO,MAAM,mBAAmB,EAAE,kBAAkB,CAAC,iBAAiB,CAgDrE,CAAC"}
1
+ {"version":3,"file":"boundedSwap.d.ts","sourceRoot":"","sources":["../../src/templates/boundedSwap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA2B,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAExF;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,mFAAmF;IACnF,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,6CAA6C;IAC7C,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,8CAA8C;IAC9C,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,8EAA8E;IAC9E,cAAc,EAAE,MAAM,CAAC;IACvB,iEAAiE;IACjE,cAAc,EAAE,MAAM,CAAC;IACvB,0EAA0E;IAC1E,WAAW,EAAE,OAAO,CAAC;IACrB,kFAAkF;IAClF,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAcF,eAAO,MAAM,mBAAmB,EAAE,kBAAkB,CAAC,iBAAiB,CAuDrE,CAAC"}
@@ -1,52 +1,62 @@
1
1
  import { decodeAbiParameters, encodeAbiParameters } from "viem";
2
2
  const ABI = [
3
- { name: "maxSwapValueUsd", type: "uint256" },
3
+ { name: "routers", type: "address[]" },
4
+ { name: "tokensIn", type: "address[]" },
5
+ { name: "tokensOut", type: "address[]" },
6
+ { name: "maxAmountPerTx", type: "uint256" },
4
7
  { name: "maxSlippageBps", type: "uint256" },
5
- { name: "allowedInputTokens", type: "address[]" },
6
- { name: "allowedOutputTokens", type: "address[]" },
7
- { name: "allowedProtocols", type: "string[]" },
8
+ { name: "priceOracle", type: "address" },
9
+ { name: "maxPriceAgeSec", type: "uint256" },
8
10
  ];
11
+ const ZERO_ADDRESS = "0x0000000000000000000000000000000000000000";
9
12
  export const boundedSwapTemplate = {
10
13
  name: "SharedBoundedSwapPermission",
11
14
  address: "0x0000000000000000000000000000000000000000",
12
15
  encoder: {
13
16
  encode(params) {
14
17
  return encodeAbiParameters(ABI, [
15
- BigInt(Math.round(params.maxSwapValueUsd)),
18
+ params.routers,
19
+ params.tokensIn,
20
+ params.tokensOut,
21
+ params.maxAmountPerTx,
16
22
  BigInt(params.maxSlippageBps),
17
- params.allowedInputTokens,
18
- params.allowedOutputTokens,
19
- params.allowedProtocols,
23
+ params.priceOracle,
24
+ BigInt(params.maxPriceAgeSec),
20
25
  ]);
21
26
  },
22
27
  decode(data) {
23
28
  const decoded = decodeAbiParameters(ABI, data);
24
29
  return {
25
- maxSwapValueUsd: Number(decoded[0]),
26
- maxSlippageBps: Number(decoded[1]),
27
- allowedInputTokens: [...decoded[2]],
28
- allowedOutputTokens: [...decoded[3]],
29
- allowedProtocols: [...decoded[4]],
30
+ routers: [...decoded[0]],
31
+ tokensIn: [...decoded[1]],
32
+ tokensOut: [...decoded[2]],
33
+ maxAmountPerTx: decoded[3],
34
+ maxSlippageBps: Number(decoded[4]),
35
+ priceOracle: decoded[5],
36
+ maxPriceAgeSec: Number(decoded[6]),
30
37
  };
31
38
  },
32
39
  },
33
40
  explainer: {
34
41
  explain(params) {
35
42
  const warnings = [];
36
- if (params.maxSwapValueUsd > 10_000) {
37
- warnings.push(`High per-swap limit: $${params.maxSwapValueUsd.toLocaleString()}`);
38
- }
39
43
  if (params.maxSlippageBps > 100) {
40
44
  warnings.push(`High slippage tolerance: ${params.maxSlippageBps / 100}%`);
41
45
  }
46
+ if (params.priceOracle === ZERO_ADDRESS) {
47
+ warnings.push("No price oracle configured — swaps are not checked against a reference price");
48
+ }
42
49
  return {
43
50
  templateName: "SharedBoundedSwapPermission",
44
51
  humanReadable: [
45
- `Maximum swap size: $${params.maxSwapValueUsd.toLocaleString()} USD per transaction`,
52
+ `Maximum input per swap: ${params.maxAmountPerTx.toString()} (input-token base units)`,
46
53
  `Maximum slippage: ${params.maxSlippageBps / 100}%`,
47
- `Allowed input tokens: ${params.allowedInputTokens.join(", ")}`,
48
- `Allowed output tokens: ${params.allowedOutputTokens.join(", ")}`,
49
- `Allowed protocols: ${params.allowedProtocols.join(", ")}`,
54
+ `Allowed routers: ${params.routers.join(", ")}`,
55
+ `Allowed input tokens: ${params.tokensIn.join(", ")}`,
56
+ `Allowed output tokens: ${params.tokensOut.join(", ")}`,
57
+ params.priceOracle === ZERO_ADDRESS
58
+ ? "Price oracle: none"
59
+ : `Price oracle: ${params.priceOracle} (max age ${params.maxPriceAgeSec}s)`,
50
60
  ],
51
61
  warnings,
52
62
  };
@@ -1 +1 @@
1
- {"version":3,"file":"boundedSwap.js","sourceRoot":"","sources":["../../src/templates/boundedSwap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAiBhE,MAAM,GAAG,GAAG;IACV,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,SAAS,EAAE;IAC5C,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE;IAC3C,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,EAAE,WAAW,EAAE;IACjD,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,EAAE,WAAW,EAAE;IAClD,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,UAAU,EAAE;CACtC,CAAC;AAEX,MAAM,CAAC,MAAM,mBAAmB,GAA0C;IACxE,IAAI,EAAE,6BAA6B;IACnC,OAAO,EAAE,4CAA4C;IAErD,OAAO,EAAE;QACP,MAAM,CAAC,MAAyB;YAC9B,OAAO,mBAAmB,CAAC,GAAG,EAAE;gBAC9B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;gBAC1C,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;gBAC7B,MAAM,CAAC,kBAAkB;gBACzB,MAAM,CAAC,mBAAmB;gBAC1B,MAAM,CAAC,gBAAgB;aACxB,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,IAAS;YACd,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC/C,OAAO;gBACL,eAAe,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACnC,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAClC,kBAAkB,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACnC,mBAAmB,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACpC,gBAAgB,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;aAClC,CAAC;QACJ,CAAC;KACF;IAED,SAAS,EAAE;QACT,OAAO,CAAC,MAAyB;YAC/B,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,IAAI,MAAM,CAAC,eAAe,GAAG,MAAM,EAAE,CAAC;gBACpC,QAAQ,CAAC,IAAI,CAAC,yBAAyB,MAAM,CAAC,eAAe,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YACpF,CAAC;YACD,IAAI,MAAM,CAAC,cAAc,GAAG,GAAG,EAAE,CAAC;gBAChC,QAAQ,CAAC,IAAI,CAAC,4BAA4B,MAAM,CAAC,cAAc,GAAG,GAAG,GAAG,CAAC,CAAC;YAC5E,CAAC;YACD,OAAO;gBACL,YAAY,EAAE,6BAA6B;gBAC3C,aAAa,EAAE;oBACb,uBAAuB,MAAM,CAAC,eAAe,CAAC,cAAc,EAAE,sBAAsB;oBACpF,qBAAqB,MAAM,CAAC,cAAc,GAAG,GAAG,GAAG;oBACnD,yBAAyB,MAAM,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBAC/D,0BAA0B,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACjE,sBAAsB,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBAC3D;gBACD,QAAQ;aACT,CAAC;QACJ,CAAC;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"boundedSwap.js","sourceRoot":"","sources":["../../src/templates/boundedSwap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AA2BhE,MAAM,GAAG,GAAG;IACV,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE;IACtC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE;IACvC,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE;IACxC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE;IAC3C,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE;IAC3C,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE;IACxC,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,SAAS,EAAE;CACnC,CAAC;AAEX,MAAM,YAAY,GAAG,4CAA4C,CAAC;AAElE,MAAM,CAAC,MAAM,mBAAmB,GAA0C;IACxE,IAAI,EAAE,6BAA6B;IACnC,OAAO,EAAE,4CAA4C;IAErD,OAAO,EAAE;QACP,MAAM,CAAC,MAAyB;YAC9B,OAAO,mBAAmB,CAAC,GAAG,EAAE;gBAC9B,MAAM,CAAC,OAAO;gBACd,MAAM,CAAC,QAAQ;gBACf,MAAM,CAAC,SAAS;gBAChB,MAAM,CAAC,cAAc;gBACrB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;gBAC7B,MAAM,CAAC,WAAW;gBAClB,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC;aAC9B,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,IAAS;YACd,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC/C,OAAO;gBACL,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACxB,QAAQ,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACzB,SAAS,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC1B,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC;gBAC1B,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAClC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;gBACvB,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;aACnC,CAAC;QACJ,CAAC;KACF;IAED,SAAS,EAAE;QACT,OAAO,CAAC,MAAyB;YAC/B,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,IAAI,MAAM,CAAC,cAAc,GAAG,GAAG,EAAE,CAAC;gBAChC,QAAQ,CAAC,IAAI,CAAC,4BAA4B,MAAM,CAAC,cAAc,GAAG,GAAG,GAAG,CAAC,CAAC;YAC5E,CAAC;YACD,IAAI,MAAM,CAAC,WAAW,KAAK,YAAY,EAAE,CAAC;gBACxC,QAAQ,CAAC,IAAI,CAAC,8EAA8E,CAAC,CAAC;YAChG,CAAC;YACD,OAAO;gBACL,YAAY,EAAE,6BAA6B;gBAC3C,aAAa,EAAE;oBACb,2BAA2B,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,2BAA2B;oBACtF,qBAAqB,MAAM,CAAC,cAAc,GAAG,GAAG,GAAG;oBACnD,oBAAoB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBAC/C,yBAAyB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACrD,0BAA0B,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACvD,MAAM,CAAC,WAAW,KAAK,YAAY;wBACjC,CAAC,CAAC,oBAAoB;wBACtB,CAAC,CAAC,iBAAiB,MAAM,CAAC,WAAW,aAAa,MAAM,CAAC,cAAc,IAAI;iBAC9E;gBACD,QAAQ;aACT,CAAC;QACJ,CAAC;KACF;CACF,CAAC"}
@@ -1,14 +1,40 @@
1
1
  import type { Address, PermissionTemplate } from "../types.js";
2
- /** Params for SharedDefiBundlePermission. */
2
+ /** Swap sub-domain config — mirrors the contract's `SwapConfig` struct. */
3
+ export type DefiBundleSwapConfig = {
4
+ routers: Address[];
5
+ tokensIn: Address[];
6
+ tokensOut: Address[];
7
+ maxAmountPerTx: bigint;
8
+ maxSlippageBps: number;
9
+ priceOracle: Address;
10
+ maxPriceAgeSec: number;
11
+ };
12
+ /** Borrow sub-domain config — mirrors the contract's `BorrowConfig` struct. */
13
+ export type DefiBundleBorrowConfig = {
14
+ protocols: Address[];
15
+ assets: Address[];
16
+ maxAmountPerTx: bigint;
17
+ maxLtvBps: number;
18
+ collateralOracle: Address;
19
+ borrowOracle: Address;
20
+ maxPriceAgeSec: number;
21
+ };
22
+ /** Transfer sub-domain config — mirrors the contract's `TransferConfig` struct. */
23
+ export type DefiBundleTransferConfig = {
24
+ recipients: Address[];
25
+ tokens: Address[];
26
+ maxAmountPerTx: bigint;
27
+ };
28
+ /**
29
+ * Params for SharedDeFiBundlePermission.
30
+ *
31
+ * Matches the on-chain `_applyConfig` decode exactly:
32
+ * abi.decode(params, (SwapConfig, BorrowConfig, TransferConfig))
33
+ */
3
34
  export type DefiBundleParams = {
4
- /** Maximum total value of the bundle in USD-equivalent (18-decimal WAD). */
5
- maxBundleValueUsd: number;
6
- /** Allowed protocol identifiers that may appear in the bundle. */
7
- allowedProtocols: string[];
8
- /** Allowed action types within the bundle (e.g. ["swap", "deposit", "borrow"]). */
9
- allowedActions: string[];
10
- /** Allowed token addresses that the bundle may interact with. */
11
- allowedTokens: Address[];
35
+ swap: DefiBundleSwapConfig;
36
+ borrow: DefiBundleBorrowConfig;
37
+ transfer: DefiBundleTransferConfig;
12
38
  };
13
39
  export declare const defiBundleTemplate: PermissionTemplate<DefiBundleParams>;
14
40
  //# sourceMappingURL=defiBundle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"defiBundle.d.ts","sourceRoot":"","sources":["../../src/templates/defiBundle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA2B,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAExF,6CAA6C;AAC7C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,4EAA4E;IAC5E,iBAAiB,EAAE,MAAM,CAAC;IAC1B,kEAAkE;IAClE,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,mFAAmF;IACnF,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,iEAAiE;IACjE,aAAa,EAAE,OAAO,EAAE,CAAC;CAC1B,CAAC;AASF,eAAO,MAAM,kBAAkB,EAAE,kBAAkB,CAAC,gBAAgB,CA6CnE,CAAC"}
1
+ {"version":3,"file":"defiBundle.d.ts","sourceRoot":"","sources":["../../src/templates/defiBundle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA2B,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAExF,2EAA2E;AAC3E,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,+EAA+E;AAC/E,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,OAAO,EAAE,CAAC;IACrB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,YAAY,EAAE,OAAO,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,mFAAmF;AACnF,MAAM,MAAM,wBAAwB,GAAG;IACrC,UAAU,EAAE,OAAO,EAAE,CAAC;IACtB,MAAM,EAAE,OAAO,EAAE,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,oBAAoB,CAAC;IAC3B,MAAM,EAAE,sBAAsB,CAAC;IAC/B,QAAQ,EAAE,wBAAwB,CAAC;CACpC,CAAC;AAkCF,eAAO,MAAM,kBAAkB,EAAE,kBAAkB,CAAC,gBAAgB,CAqFnE,CAAC"}
@@ -1,48 +1,110 @@
1
1
  import { decodeAbiParameters, encodeAbiParameters } from "viem";
2
+ const SWAP_COMPONENTS = [
3
+ { name: "routers", type: "address[]" },
4
+ { name: "tokensIn", type: "address[]" },
5
+ { name: "tokensOut", type: "address[]" },
6
+ { name: "maxAmountPerTx", type: "uint256" },
7
+ { name: "maxSlippageBps", type: "uint256" },
8
+ { name: "priceOracle", type: "address" },
9
+ { name: "maxPriceAgeSec", type: "uint256" },
10
+ ];
11
+ const BORROW_COMPONENTS = [
12
+ { name: "protocols", type: "address[]" },
13
+ { name: "assets", type: "address[]" },
14
+ { name: "maxAmountPerTx", type: "uint256" },
15
+ { name: "maxLtvBps", type: "uint256" },
16
+ { name: "collateralOracle", type: "address" },
17
+ { name: "borrowOracle", type: "address" },
18
+ { name: "maxPriceAgeSec", type: "uint256" },
19
+ ];
20
+ const TRANSFER_COMPONENTS = [
21
+ { name: "recipients", type: "address[]" },
22
+ { name: "tokens", type: "address[]" },
23
+ { name: "maxAmountPerTx", type: "uint256" },
24
+ ];
2
25
  const ABI = [
3
- { name: "maxBundleValueUsd", type: "uint256" },
4
- { name: "allowedProtocols", type: "string[]" },
5
- { name: "allowedActions", type: "string[]" },
6
- { name: "allowedTokens", type: "address[]" },
26
+ { name: "swap", type: "tuple", components: SWAP_COMPONENTS },
27
+ { name: "borrow", type: "tuple", components: BORROW_COMPONENTS },
28
+ { name: "transfer", type: "tuple", components: TRANSFER_COMPONENTS },
7
29
  ];
8
30
  export const defiBundleTemplate = {
9
- name: "SharedDefiBundlePermission",
31
+ name: "SharedDeFiBundlePermission",
10
32
  address: "0x0000000000000000000000000000000000000000",
11
33
  encoder: {
12
34
  encode(params) {
13
35
  return encodeAbiParameters(ABI, [
14
- BigInt(Math.round(params.maxBundleValueUsd)),
15
- params.allowedProtocols,
16
- params.allowedActions,
17
- params.allowedTokens,
36
+ {
37
+ routers: params.swap.routers,
38
+ tokensIn: params.swap.tokensIn,
39
+ tokensOut: params.swap.tokensOut,
40
+ maxAmountPerTx: params.swap.maxAmountPerTx,
41
+ maxSlippageBps: BigInt(params.swap.maxSlippageBps),
42
+ priceOracle: params.swap.priceOracle,
43
+ maxPriceAgeSec: BigInt(params.swap.maxPriceAgeSec),
44
+ },
45
+ {
46
+ protocols: params.borrow.protocols,
47
+ assets: params.borrow.assets,
48
+ maxAmountPerTx: params.borrow.maxAmountPerTx,
49
+ maxLtvBps: BigInt(params.borrow.maxLtvBps),
50
+ collateralOracle: params.borrow.collateralOracle,
51
+ borrowOracle: params.borrow.borrowOracle,
52
+ maxPriceAgeSec: BigInt(params.borrow.maxPriceAgeSec),
53
+ },
54
+ {
55
+ recipients: params.transfer.recipients,
56
+ tokens: params.transfer.tokens,
57
+ maxAmountPerTx: params.transfer.maxAmountPerTx,
58
+ },
18
59
  ]);
19
60
  },
20
61
  decode(data) {
21
- const decoded = decodeAbiParameters(ABI, data);
62
+ const [swap, borrow, transfer] = decodeAbiParameters(ABI, data);
22
63
  return {
23
- maxBundleValueUsd: Number(decoded[0]),
24
- allowedProtocols: [...decoded[1]],
25
- allowedActions: [...decoded[2]],
26
- allowedTokens: [...decoded[3]],
64
+ swap: {
65
+ routers: [...swap.routers],
66
+ tokensIn: [...swap.tokensIn],
67
+ tokensOut: [...swap.tokensOut],
68
+ maxAmountPerTx: swap.maxAmountPerTx,
69
+ maxSlippageBps: Number(swap.maxSlippageBps),
70
+ priceOracle: swap.priceOracle,
71
+ maxPriceAgeSec: Number(swap.maxPriceAgeSec),
72
+ },
73
+ borrow: {
74
+ protocols: [...borrow.protocols],
75
+ assets: [...borrow.assets],
76
+ maxAmountPerTx: borrow.maxAmountPerTx,
77
+ maxLtvBps: Number(borrow.maxLtvBps),
78
+ collateralOracle: borrow.collateralOracle,
79
+ borrowOracle: borrow.borrowOracle,
80
+ maxPriceAgeSec: Number(borrow.maxPriceAgeSec),
81
+ },
82
+ transfer: {
83
+ recipients: [...transfer.recipients],
84
+ tokens: [...transfer.tokens],
85
+ maxAmountPerTx: transfer.maxAmountPerTx,
86
+ },
27
87
  };
28
88
  },
29
89
  },
30
90
  explainer: {
31
91
  explain(params) {
32
92
  const warnings = [];
33
- if (params.maxBundleValueUsd > 100_000) {
34
- warnings.push(`Large bundle value cap: $${params.maxBundleValueUsd.toLocaleString()}`);
93
+ if (params.swap.maxSlippageBps > 100) {
94
+ warnings.push(`High swap slippage tolerance: ${params.swap.maxSlippageBps / 100}%`);
95
+ }
96
+ if (params.borrow.maxLtvBps > 8000) {
97
+ warnings.push(`High borrow LTV cap: ${params.borrow.maxLtvBps / 100}%`);
35
98
  }
36
- if (params.allowedActions.includes("borrow") && params.allowedActions.includes("swap")) {
99
+ if (params.borrow.protocols.length > 0 && params.swap.routers.length > 0) {
37
100
  warnings.push("Bundle permits both borrowing and swapping — review leverage exposure");
38
101
  }
39
102
  return {
40
- templateName: "SharedDefiBundlePermission",
103
+ templateName: "SharedDeFiBundlePermission",
41
104
  humanReadable: [
42
- `Maximum bundle value: $${params.maxBundleValueUsd.toLocaleString()} USD`,
43
- `Allowed protocols: ${params.allowedProtocols.join(", ")}`,
44
- `Allowed actions: ${params.allowedActions.join(", ")}`,
45
- `Allowed tokens: ${params.allowedTokens.join(", ")}`,
105
+ `Swap routers: ${params.swap.routers.join(", ") || "none"}; max/tx: ${params.swap.maxAmountPerTx.toString()}; slippage: ${params.swap.maxSlippageBps / 100}%`,
106
+ `Borrow protocols: ${params.borrow.protocols.join(", ") || "none"}; max/tx: ${params.borrow.maxAmountPerTx.toString()}; LTV: ${params.borrow.maxLtvBps / 100}%`,
107
+ `Transfer — recipients: ${params.transfer.recipients.join(", ") || "none"}; max/tx: ${params.transfer.maxAmountPerTx.toString()}`,
46
108
  ],
47
109
  warnings,
48
110
  };
@@ -1 +1 @@
1
- {"version":3,"file":"defiBundle.js","sourceRoot":"","sources":["../../src/templates/defiBundle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,MAAM,CAAC;AAehE,MAAM,GAAG,GAAG;IACV,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,SAAS,EAAE;IAC9C,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,EAAE,UAAU,EAAE;IAC9C,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,UAAU,EAAE;IAC5C,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,WAAW,EAAE;CACpC,CAAC;AAEX,MAAM,CAAC,MAAM,kBAAkB,GAAyC;IACtE,IAAI,EAAE,4BAA4B;IAClC,OAAO,EAAE,4CAA4C;IAErD,OAAO,EAAE;QACP,MAAM,CAAC,MAAwB;YAC7B,OAAO,mBAAmB,CAAC,GAAG,EAAE;gBAC9B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;gBAC5C,MAAM,CAAC,gBAAgB;gBACvB,MAAM,CAAC,cAAc;gBACrB,MAAM,CAAC,aAAa;aACrB,CAAC,CAAC;QACL,CAAC;QACD,MAAM,CAAC,IAAS;YACd,MAAM,OAAO,GAAG,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAC/C,OAAO;gBACL,iBAAiB,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBACrC,gBAAgB,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBACjC,cAAc,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;gBAC/B,aAAa,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;aAC/B,CAAC;QACJ,CAAC;KACF;IAED,SAAS,EAAE;QACT,OAAO,CAAC,MAAwB;YAC9B,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,IAAI,MAAM,CAAC,iBAAiB,GAAG,OAAO,EAAE,CAAC;gBACvC,QAAQ,CAAC,IAAI,CAAC,4BAA4B,MAAM,CAAC,iBAAiB,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;YACzF,CAAC;YACD,IAAI,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACvF,QAAQ,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;YACzF,CAAC;YACD,OAAO;gBACL,YAAY,EAAE,4BAA4B;gBAC1C,aAAa,EAAE;oBACb,0BAA0B,MAAM,CAAC,iBAAiB,CAAC,cAAc,EAAE,MAAM;oBACzE,sBAAsB,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBAC1D,oBAAoB,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBACtD,mBAAmB,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBACrD;gBACD,QAAQ;aACT,CAAC;QACJ,CAAC;KACF;CACF,CAAC"}
1
+ {"version":3,"file":"defiBundle.js","sourceRoot":"","sources":["../../src/templates/defiBundle.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,29 @@
1
1
  import type { Address, PermissionTemplate } from "../types.js";
2
- /** Params for SharedPendlePermission. */
2
+ /**
3
+ * Params for SharedPendlePermission.
4
+ *
5
+ * Matches the on-chain `_applyConfig` decode exactly:
6
+ * abi.decode(params, (address, address[], uint128, bool, bool, bool, bool, bool))
7
+ * → pendleRouter, allowedMarkets, maxAmountPerTx,
8
+ * allowLiquidityOps, allowPtSwaps, allowYtSwaps, allowMintRedeem, allowClaimYield
9
+ */
3
10
  export type PendleParams = {
4
- /** Maximum position size in USD-equivalent (18-decimal WAD). */
5
- maxPositionValueUsd: number;
6
- /** Pendle market addresses the agent may interact with. */
11
+ /** Pendle Router V4 address the agent may call. Must be non-zero. */
12
+ pendleRouter: Address;
13
+ /** Pendle market (and YT, for mint/redeem) addresses the agent may interact with. */
7
14
  allowedMarkets: Address[];
8
- /** Allowed action types (e.g. ["addLiquidity", "swapPT", "swapYT", "redeem"]). */
9
- allowedActions: string[];
10
- /** Minimum implied APY gate in basis points (e.g. 500 = 5%). */
11
- minImpliedApyBps: number;
15
+ /** Maximum amount of a single tx, in base units (uint128). */
16
+ maxAmountPerTx: bigint;
17
+ /** Allow add/remove liquidity operations. */
18
+ allowLiquidityOps: boolean;
19
+ /** Allow PT swaps. */
20
+ allowPtSwaps: boolean;
21
+ /** Allow YT swaps. */
22
+ allowYtSwaps: boolean;
23
+ /** Allow mint / redeem of PY. */
24
+ allowMintRedeem: boolean;
25
+ /** Allow claiming yield (redeemDueInterestAndRewards). */
26
+ allowClaimYield: boolean;
12
27
  };
13
28
  export declare const pendleTemplate: PermissionTemplate<PendleParams>;
14
29
  //# sourceMappingURL=pendle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pendle.d.ts","sourceRoot":"","sources":["../../src/templates/pendle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA2B,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAExF,yCAAyC;AACzC,MAAM,MAAM,YAAY,GAAG;IACzB,gEAAgE;IAChE,mBAAmB,EAAE,MAAM,CAAC;IAC5B,2DAA2D;IAC3D,cAAc,EAAE,OAAO,EAAE,CAAC;IAC1B,kFAAkF;IAClF,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,gEAAgE;IAChE,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAAC;AASF,eAAO,MAAM,cAAc,EAAE,kBAAkB,CAAC,YAAY,CA6C3D,CAAC"}
1
+ {"version":3,"file":"pendle.d.ts","sourceRoot":"","sources":["../../src/templates/pendle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAA2B,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAExF;;;;;;;GAOG;AACH,MAAM,MAAM,YAAY,GAAG;IACzB,qEAAqE;IACrE,YAAY,EAAE,OAAO,CAAC;IACtB,qFAAqF;IACrF,cAAc,EAAE,OAAO,EAAE,CAAC;IAC1B,8DAA8D;IAC9D,cAAc,EAAE,MAAM,CAAC;IACvB,6CAA6C;IAC7C,iBAAiB,EAAE,OAAO,CAAC;IAC3B,sBAAsB;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,sBAAsB;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,iCAAiC;IACjC,eAAe,EAAE,OAAO,CAAC;IACzB,0DAA0D;IAC1D,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAeF,eAAO,MAAM,cAAc,EAAE,kBAAkB,CAAC,YAAY,CA4D3D,CAAC"}