@oakagentkit/core 0.1.9 → 0.2.0

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 (171) hide show
  1. package/build/dist/api/deployments.d.ts +26 -0
  2. package/build/dist/api/deployments.js +1 -0
  3. package/build/dist/api/history.js +1 -1
  4. package/build/dist/api/modules/beefy/clm.js +1 -1
  5. package/build/dist/api/modules/beefy/guard.js +1 -1
  6. package/build/dist/api/modules/beefy/index.js +1 -1
  7. package/build/dist/api/modules/beefy/liquidity.js +1 -1
  8. package/build/dist/api/modules/clanker/index.js +1 -1
  9. package/build/dist/api/modules/grove/index.js +1 -1
  10. package/build/dist/api/modules/hoodlock/airdrop.js +1 -1
  11. package/build/dist/api/modules/hoodlock/fee.js +1 -1
  12. package/build/dist/api/modules/hoodlock/guard.js +1 -1
  13. package/build/dist/api/modules/hoodlock/index.js +1 -1
  14. package/build/dist/api/modules/hoodlock/lifecycle.js +1 -1
  15. package/build/dist/api/modules/hoodlock/locks-burn.js +1 -1
  16. package/build/dist/api/modules/hoodlock/public.js +1 -1
  17. package/build/dist/api/modules/hookr/actions.js +1 -1
  18. package/build/dist/api/modules/hookr/addons.js +1 -1
  19. package/build/dist/api/modules/hookr/contracts.js +1 -1
  20. package/build/dist/api/modules/hookr/create-cancel.js +1 -1
  21. package/build/dist/api/modules/hookr/discovery.js +1 -1
  22. package/build/dist/api/modules/hookr/fill-bounty.js +1 -1
  23. package/build/dist/api/modules/hookr/index.js +1 -1
  24. package/build/dist/api/modules/hookr/public-reads.js +1 -1
  25. package/build/dist/api/modules/hookr/relay.js +1 -1
  26. package/build/dist/api/modules/kyberswap/index.js +1 -1
  27. package/build/dist/api/modules/kyberswap/source-pools.d.ts +22 -3
  28. package/build/dist/api/modules/kyberswap/source-pools.js +1 -1
  29. package/build/dist/api/modules/longbow/administration.js +1 -1
  30. package/build/dist/api/modules/longbow/fixed.js +1 -1
  31. package/build/dist/api/modules/longbow/index.js +1 -1
  32. package/build/dist/api/modules/meridian/index.js +1 -1
  33. package/build/dist/api/modules/meridian/rfq.js +1 -1
  34. package/build/dist/api/modules/morpho/bundles.js +1 -1
  35. package/build/dist/api/modules/morpho/in-kind.js +1 -1
  36. package/build/dist/api/modules/morpho/index.js +1 -1
  37. package/build/dist/api/modules/morpho/local-guard.js +1 -1
  38. package/build/dist/api/modules/morpho/midnight.js +1 -1
  39. package/build/dist/api/modules/morpho/protocol.js +1 -1
  40. package/build/dist/api/modules/morpho/vault-tools.js +1 -1
  41. package/build/dist/api/modules/netnet/card-plan.js +1 -1
  42. package/build/dist/api/modules/netnet/card-read.js +1 -1
  43. package/build/dist/api/modules/netnet/card-recovery.js +1 -1
  44. package/build/dist/api/modules/netnet/desk-action.js +1 -1
  45. package/build/dist/api/modules/netnet/financial.js +1 -1
  46. package/build/dist/api/modules/netnet/index.js +1 -1
  47. package/build/dist/api/modules/orbio/index.js +1 -1
  48. package/build/dist/api/modules/pons/claim.js +1 -1
  49. package/build/dist/api/modules/pons/index.js +1 -1
  50. package/build/dist/api/modules/pons/launch-status.js +1 -1
  51. package/build/dist/api/modules/pons/reads.js +1 -1
  52. package/build/dist/api/modules/pons/trade.js +1 -1
  53. package/build/dist/api/modules/poolstrade/index.js +1 -1
  54. package/build/dist/api/modules/priors/index.js +1 -1
  55. package/build/dist/api/modules/relay/discovery.js +1 -1
  56. package/build/dist/api/modules/relay/inbound.js +1 -1
  57. package/build/dist/api/modules/relay/index.js +1 -1
  58. package/build/dist/api/modules/relay/outbound-status.js +1 -1
  59. package/build/dist/api/modules/steakhouse/index.js +1 -1
  60. package/build/dist/api/modules/steakhouse/local-guard.js +1 -1
  61. package/build/dist/api/modules/steakhouse/management.js +1 -1
  62. package/build/dist/api/modules/steakhouse/v2-exit.js +1 -1
  63. package/build/dist/api/modules/tickerspring/basket-routes.js +1 -1
  64. package/build/dist/api/modules/tickerspring/contract-reads.js +1 -1
  65. package/build/dist/api/modules/tickerspring/exit-preview.js +1 -1
  66. package/build/dist/api/modules/tickerspring/guards.js +1 -1
  67. package/build/dist/api/modules/tickerspring/index.js +1 -1
  68. package/build/dist/api/modules/tickerspring/journeys.js +1 -1
  69. package/build/dist/api/modules/tickerspring/ladder.js +1 -1
  70. package/build/dist/api/modules/tickerspring/maker.js +1 -1
  71. package/build/dist/api/modules/tickerspring/order-accounting.js +1 -1
  72. package/build/dist/api/modules/tickerspring/research.js +1 -1
  73. package/build/dist/api/modules/tickerspring/strategies.js +1 -1
  74. package/build/dist/api/modules/uniswap/auction-create.js +1 -1
  75. package/build/dist/api/modules/uniswap/auction.js +1 -1
  76. package/build/dist/api/modules/uniswap/batch.js +1 -1
  77. package/build/dist/api/modules/uniswap/common.js +1 -1
  78. package/build/dist/api/modules/uniswap/fees.js +1 -1
  79. package/build/dist/api/modules/uniswap/index.js +1 -1
  80. package/build/dist/api/modules/uniswap/local-guard.js +1 -1
  81. package/build/dist/api/modules/uniswap/oracle.js +1 -1
  82. package/build/dist/api/modules/uniswap/pool-math.js +1 -1
  83. package/build/dist/api/modules/uniswap/pools.js +1 -1
  84. package/build/dist/api/modules/uniswap/position.js +1 -1
  85. package/build/dist/api/modules/uniswap/protocol.js +1 -1
  86. package/build/dist/api/modules/uniswap/token-jar.js +1 -1
  87. package/build/dist/api/modules/uniswap/trade-batch.js +1 -1
  88. package/build/dist/api/modules/uniswap/trade.js +1 -1
  89. package/build/dist/api/modules/uniswap/v2.js +1 -1
  90. package/build/dist/api/modules/uniswap/v3.js +1 -1
  91. package/build/dist/api/modules/uniswap/v4.js +1 -1
  92. package/build/dist/api/modules/uniswap/wrap.js +1 -1
  93. package/build/dist/api/modules/velora/claims.js +1 -1
  94. package/build/dist/api/modules/velora/index.js +1 -1
  95. package/build/dist/api/prices.js +1 -1
  96. package/build/dist/api/routes.d.ts +2 -0
  97. package/build/dist/api/routes.js +1 -1
  98. package/build/dist/api/send.js +1 -1
  99. package/build/dist/api/signing-registry.js +1 -1
  100. package/build/dist/api/simulate.js +1 -1
  101. package/build/dist/api/swap.js +1 -1
  102. package/build/dist/api/tokens.js +1 -1
  103. package/build/dist/chunks/{QOY4AANB.js → 2SNQWKHA.js} +1 -1
  104. package/build/dist/chunks/{FYTF2QMS.js → 3ACEWCKZ.js} +1 -1
  105. package/build/dist/chunks/{HZUWK5B2.js → 46ZA2R5L.js} +1 -1
  106. package/build/dist/chunks/{W6G2QGYF.js → 4IPW5WZ4.js} +1 -1
  107. package/build/dist/chunks/{JRZLKIYB.js → 55NX776C.js} +1 -1
  108. package/build/dist/chunks/{2EGFALNH.js → 5FTSKYQH.js} +1 -1
  109. package/build/dist/chunks/{OJP7Y4AM.js → 5HW6JKME.js} +1 -1
  110. package/build/dist/chunks/{ZL3KVABO.js → 5VXNQFYJ.js} +1 -1
  111. package/build/dist/chunks/{ITIIHCZK.js → 64AF7ECA.js} +1 -1
  112. package/build/dist/chunks/{FLXID6I3.js → 6LLOTPH2.js} +1 -1
  113. package/build/dist/chunks/{CXMC3T6B.js → 6PU2CMQZ.js} +1 -1
  114. package/build/dist/chunks/{E2IVNGLC.js → 7BTELNNI.js} +1 -1
  115. package/build/dist/chunks/{C5LR6F4B.js → 7T4BYFD4.js} +1 -1
  116. package/build/dist/chunks/{6SB3FB3P.js → 7Z5IM2QZ.js} +1 -1
  117. package/build/dist/chunks/{JOMK32QW.js → A25P24G2.js} +1 -1
  118. package/build/dist/chunks/{FL3EF72E.js → ANQ43XJA.js} +1 -1
  119. package/build/dist/chunks/{B72Q2EQ2.js → BFVLBENV.js} +1 -1
  120. package/build/dist/chunks/{QH3AL3UN.js → BV3AHLH5.js} +1 -1
  121. package/build/dist/chunks/{EKGHKEKV.js → BXN3MDS4.js} +1 -1
  122. package/build/dist/chunks/CAU44UWP.js +1 -0
  123. package/build/dist/chunks/{HACP2Q6D.js → D6VP3N27.js} +2 -2
  124. package/build/dist/chunks/{37QNUNED.js → DLIOZCEG.js} +1 -1
  125. package/build/dist/chunks/EA6IYKIB.js +1 -0
  126. package/build/dist/chunks/{SYZ55RCX.js → EYYUWFUR.js} +1 -1
  127. package/build/dist/chunks/{HF2AGJZC.js → FSPNOVKB.js} +1 -1
  128. package/build/dist/chunks/G4PDM3MX.js +1 -0
  129. package/build/dist/chunks/{ZPNGV34U.js → GHDDVBPK.js} +1 -1
  130. package/build/dist/chunks/{OK3TQFXZ.js → GSI5COTD.js} +1 -1
  131. package/build/dist/chunks/{CAYBSVA6.js → HRG2VVPY.js} +1 -1
  132. package/build/dist/chunks/{MWWYIFXJ.js → ITV52TIE.js} +1 -1
  133. package/build/dist/chunks/{4CDR7F4I.js → IUXOUKQN.js} +1 -1
  134. package/build/dist/chunks/{5H3MQWH7.js → JC4SYMBV.js} +1 -1
  135. package/build/dist/chunks/{KEPQXFHU.js → JREVERSC.js} +1 -1
  136. package/build/dist/chunks/{NUWL6TJM.js → K463HFGC.js} +1 -1
  137. package/build/dist/chunks/{VCWDJQDE.js → KQFDLDHL.js} +1 -1
  138. package/build/dist/chunks/{LFKSXD3S.js → LI7FYINH.js} +1 -1
  139. package/build/dist/chunks/{4X6JEMSF.js → N6RL3SUZ.js} +1 -1
  140. package/build/dist/chunks/{E7ASOYQI.js → NBRMUFJP.js} +1 -1
  141. package/build/dist/chunks/{UEYFMXV3.js → NIOBE2LK.js} +1 -1
  142. package/build/dist/chunks/NMFVXBTL.js +1 -0
  143. package/build/dist/chunks/{REGJY5RC.js → NO57NGRV.js} +1 -1
  144. package/build/dist/chunks/{SEW7UP5U.js → O5SU2I3G.js} +1 -1
  145. package/build/dist/chunks/{P6ELT4ZV.js → PJ65ZOQ7.js} +1 -1
  146. package/build/dist/chunks/{B7V7AA5A.js → QCD33HMD.js} +1 -1
  147. package/build/dist/chunks/{SS7U3CMZ.js → QQWF6A4P.js} +1 -1
  148. package/build/dist/chunks/{NNZ4SZZ4.js → QZM7CWZW.js} +1 -1
  149. package/build/dist/chunks/{HYIEQG4X.js → QZTUMSQY.js} +1 -1
  150. package/build/dist/chunks/{JVTVOK6P.js → R7D256HG.js} +1 -1
  151. package/build/dist/chunks/{Z4LJ2GTX.js → RTBOMWCB.js} +1 -1
  152. package/build/dist/chunks/{EHVPRQHS.js → SDICP7BT.js} +1 -1
  153. package/build/dist/chunks/{L2MTPRU7.js → T3NPRRTY.js} +1 -1
  154. package/build/dist/chunks/{BQLLTY4L.js → TNRDCBGO.js} +1 -1
  155. package/build/dist/chunks/{IKP3Z3RX.js → U3FMCX3L.js} +1 -1
  156. package/build/dist/chunks/{WHT45EFX.js → UIIJWIR6.js} +1 -1
  157. package/build/dist/chunks/{K2LWX3PZ.js → UMK564HS.js} +1 -1
  158. package/build/dist/chunks/{AIWZGIZ6.js → UPPYXY74.js} +1 -1
  159. package/build/dist/chunks/{XCFA73P2.js → VJ3W2V3B.js} +1 -1
  160. package/build/dist/chunks/{RNEMTLQG.js → VY3P34PY.js} +1 -1
  161. package/build/dist/chunks/{2LM5C7FQ.js → WDGPCPQJ.js} +1 -1
  162. package/build/dist/chunks/{PHXWBC4O.js → XKRWJCYE.js} +1 -1
  163. package/build/dist/chunks/{E2Q5IA67.js → Y2IWPNEW.js} +1 -1
  164. package/build/dist/chunks/{YONRUWN7.js → ZCGVBK5K.js} +1 -1
  165. package/build/dist/chunks/{BBQVTEYB.js → ZGXNTWYG.js} +1 -1
  166. package/build/dist/chunks/{CS55ERS3.js → ZYR5LSVB.js} +1 -1
  167. package/package.json +1 -1
  168. package/build/dist/chunks/2O6A6WEX.js +0 -1
  169. package/build/dist/chunks/3Z3U4YPA.js +0 -1
  170. package/build/dist/chunks/EAEQOS7Y.js +0 -1
  171. package/build/dist/chunks/ZQI7B2Z7.js +0 -1
@@ -1 +1 @@
1
- import{a as ie,b as le,c as ce,d as Z}from"./AFHHRDPJ.js";import{a as E,b as Y}from"./HACP2Q6D.js";import{c as ae}from"./MYBDO5SA.js";import{a as X}from"./UWOFA6GV.js";import{b as B,c as C,d as se,e as h,g as v,i as oe}from"./73N3TOJL.js";import{a as w,i as ne,l as F,n as re}from"./XPFVT2EA.js";import{a as T}from"./5YS5V2LK.js";import{a as I}from"./JXOEJPJ4.js";import{erc20Abi as M,getAddress as f,parseAbi as L,zeroAddress as ee}from"viem";var x="https://ponsfamily.com/api",de="https://balancesapi.ponsfamily.com/v1",Q=L(["function sellableTokens() view returns (uint256)","function reservedTokens() view returns (uint256)","function readyToGraduate() view returns (bool)","function graduated() view returns (bool)","function currentSnipeTaxBps(address) view returns (uint256)"]),be=L(["event CurveBuy(address indexed buyer, address indexed recipient, uint256 quoteIn, uint256 tokensOut, uint256 fee, uint256 tax)","event CurveSell(address indexed seller, address indexed recipient, uint256 tokensIn, uint256 quoteOut, uint256 fee, uint256 tax)"]),ye=L(["function pendingCreatorFeeRecipient(address) view returns (address,uint256,uint256)"]),he=L(["function getTokenInfo() view returns (address,string,string,(string,string,string,string,string))"]),ue=L(["function totalLocked(address) view returns (uint256)","function totalReleased(address) view returns (uint256)","function vestedAmount(address) view returns (uint256)","function releasable(address) view returns (uint256)","function vestingStart(address) view returns (uint256)","function VESTING_DURATION() view returns (uint256)"]),ge=10000n,me=2000n,ke=/^[0-9]{1,78}$/,m=e=>typeof e=="number"&&Number.isFinite(e)?e:null,$=(e,t=80)=>typeof e=="string"?I(e.slice(0,t)):null;function P(e,t="address"){return oe(e,`Provide a ${t}.`,se)}function j(e,t,o){let s=e??t;if(typeof s!="number"||!Number.isInteger(s)||s<1||s>o)throw new T(`Choose a limit from 1 to ${o}.`);return s}function O(e,t=0){return e===null||typeof e=="boolean"?e:typeof e=="number"?Number.isFinite(e)?e:null:typeof e=="string"?I(e.slice(0,80)):t>=3?null:Array.isArray(e)?{total:e.length,items:e.slice(0,10).map(o=>O(o,t+1))}:h(e)?Object.fromEntries(Object.entries(e).filter(([o])=>/^[A-Za-z0-9_]{1,40}$/.test(o)).slice(0,40).map(([o,s])=>[o,O(s,t+1)])):null}async function U(e,t,o){return ae(e.http,t,{method:"GET",redirect:"error",headers:{accept:"application/json"}},o)}async function J(e,t,o){let s=e.clientFor(w),[c,a]=await Promise.all([s.readContract({address:t,abi:M,functionName:"symbol",blockNumber:o}),s.readContract({address:t,abi:M,functionName:"decimals",blockNumber:o})]);return{address:t,chainId:w,symbol:I(c),decimals:a}}async function we(e,t){let o=P(t.token,"Pons launch token address"),s=t.holder===void 0?void 0:P(t.holder,"holder address"),c=j(t.limit,20,50),{offset:a,fingerprint:l}=ce(t.cursor),r=e.clientFor(w),p=await r.getBlockNumber({cacheTime:0}),g=await E(e,o,p),i=await le(e,o),n=await r.getBlockNumber({cacheTime:0});if(l&&l!==i.fingerprint)throw new T("The Pons holder index changed. Retry pons_holders without a cursor.");let u=i.body,k=[{wallet:ee,reason:"burn (zero address)"},{wallet:f("0x000000000000000000000000000000000000dead"),reason:"burn (dead address)"},{wallet:f(g.curve),reason:"Pons bonding curve"},{wallet:f(re),reason:"Uniswap v4 pool manager (shared pool custody)"}],N=new Map(k.map(d=>[d.wallet,d.reason])),R=i.rows.filter(d=>!N.has(f(d.wallet))),[G,q]=await Promise.all([J(e,o,n),r.readContract({address:o,abi:M,functionName:"totalSupply",blockNumber:n})]),W=d=>1+R.filter(b=>BigInt(b.balance)>BigInt(d)).length,_=async(d,b)=>{let D=await r.readContract({address:o,abi:M,functionName:"balanceOf",args:[d],blockNumber:n});return{wallet:d,indexedBalance:b,indexedRank:b===null||N.has(d)?null:W(b),indexedShareOfSupply:b===null?null:Z(b,u.supply),shareOfSupply:Z(D.toString(),q.toString()),balance:{token:G,amount:D.toString()},matchesIndex:b===null?null:D.toString()===b}},A=await Promise.all(R.slice(a,a+c).map(async d=>({...await _(f(d.wallet),d.balance),share:m(d.share),label:$(d.label,40)}))),V=s?i.rows.find(d=>v(d.wallet,s)):void 0,H=s?{...await _(s,V?.balance??null),excluded:N.get(s)??null,rankStatus:N.has(s)?"excluded":V?"ranked by indexed balance":"absent from index; rank unknown"}:void 0;return{token:G,statusBlock:n.toString(),totalSupply:q.toString(),holderCount:R.length,indexHolderCount:u.holders,indexSupply:u.supply,burned:u.burned,circulating:u.circulating,page:A,nextCursor:a+c<R.length?`holders_${a+c}_${i.fingerprint}`:null,...H?{wallet:H}:{},exclusions:k.map(d=>({...d,indexedBalance:i.rows.find(b=>v(b.wallet,d.wallet))?.balance??"0",countedInIndex:i.rows.some(b=>v(b.wallet,d.wallet))})),indexAsOf:{rollupBucket:u.as_of.rollup_bucket,tailFromBlock:u.as_of.tail_from_block},indexFetchedAt:i.fetchedAt,source:`${ie}/tokens/{token}/holders`,sources:{holderCount:"Pons balances index, excluding the labelled system addresses",rank:"Pons balances index, descending balance; equal balances share a rank, system addresses excluded",indexedShareOfSupply:"Pons indexed balance / indexed total supply",balance:`on-chain balanceOf at block ${n}`,totalSupply:`on-chain totalSupply at block ${n}`,shareOfSupply:`on-chain balanceOf / totalSupply at block ${n}`,burned:"Pons balances index",circulating:"Pons balances index"},note:"Counts, ranking, burned and circulating supply come from Pons\u2019s balances index, not on-chain truth. The API does not pin pages to a block; its rollup/tail markers are not an exact snapshot block. Each listed balance was re-read on chain at statusBlock. matchesIndex false indicates disagreement, not proof of which source is wrong. A wallet absent from the index has unknown rank even if its on-chain balance is positive. Labels are untrusted."}}var ve=e=>h(e)&&Array.isArray(e.items)&&e.items.length<=500&&e.items.every(t=>h(t)&&typeof t.token=="string"&&B.test(t.token)&&typeof t.amountTokens=="number");async function xe(e,t,o){let s=P(t.holder??o,"holder address"),c=j(t.limit,20,40),a=e.clientFor(w),l=await U(e,`${x}/profile/${s.toLowerCase()}?view=positions`,ve),r=await a.getBlockNumber({cacheTime:0}),p=[...new Map(l.items.filter(n=>n.amountTokens>0||n.state==="open").map(n=>[n.token.toLowerCase(),n])).values()],g=await Promise.all(p.slice(0,c).map(async n=>{let u=f(n.token);try{await E(e,u,r);let[k,N]=await Promise.all([J(e,u,r),a.readContract({address:u,abi:M,functionName:"balanceOf",args:[s],blockNumber:r})]);return{ok:!0,token:u,meta:k,balance:N,item:n}}catch{return{ok:!1}}})),i=g.filter(n=>n.ok);return{holder:s,statusBlock:r.toString(),source:`${x}/profile/{holder}?view=positions`,holdings:i.map(n=>({token:n.meta,balance:{token:n.meta,amount:n.balance.toString()},index:{state:$(n.item.state,20),valueUsd:m(n.item.valueUsd),investedUsd:m(n.item.investedUsd),totalPnlUsd:m(n.item.totalPnlUsd),totalPnlPct:m(n.item.totalPnlPct),buys:m(n.item.buys),sells:m(n.item.sells),lastTradeAt:m(n.item.lastTradeAt)}})),excludedUnverified:g.length-i.length,truncated:p.length>c,note:"Discovery through Pons\u2019s positions index; every launch was re-read from the pinned factory and every balance is an on-chain read. USD value and profit and loss are index estimates, not execution quotes. Sell the on-chain balance with pons_sell."}}var Ae=e=>h(e)&&Array.isArray(e.items)&&e.items.length<=100&&e.items.every(t=>h(t)&&h(t.launch)&&typeof t.launch.address=="string"&&B.test(t.launch.address)&&typeof t.launch.factory=="string"&&B.test(t.launch.factory));async function Se(e,t){let o=j(t.limit,10,20),s=await U(e,`${x}/launches/trending`,Ae),c=s.items.filter(r=>v(r.launch.factory,F)).slice(0,o),a=await e.clientFor(w).getBlockNumber({cacheTime:0});return{items:await Promise.all(c.map(async r=>({status:await Y(e,f(r.launch.address),a),index:{volumeUsd:m(r.volumeUsd),trades:m(r.trades),traders:m(r.traders),change:m(r.change)}}))),statusBlock:a.toString(),source:`${x}/launches/trending`,excludedOtherFactories:s.items.length-s.items.filter(r=>v(r.launch.factory,F)).length,note:"Ranking is Pons\u2019s own trending list (discovery only); each launch was re-read on chain from the pinned factory."}}var z={overview:"analytics",burn:"analytics/burn",buyback:"analytics/buyback"};async function Te(e,t){let o=t.view??"overview";if(typeof o!="string"||!Object.hasOwn(z,o))throw new T("Choose view overview, burn or buyback.");let s=await U(e,`${x}/${z[o]}`,h);if(o==="overview"){let c=Array.isArray(s.series)?s.series:[];return{view:o,source:`${x}/analytics`,generatedAt:m(s.generatedAt),latestDay:m(s.latestDay),latest:O(c.at(-1)),seriesDays:c.length,today:O(s.today),earnings:O(s.earnings),indexer:O(s.indexer),note:"Protocol-wide figures from Pons\u2019s analytics index; unaudited aggregates, not a quote."}}return{view:o,source:`${x}/${z[o]}`,data:O(s),note:"Protocol-wide figures from Pons\u2019s analytics index; unaudited aggregates, not a quote."}}var Ce=e=>h(e)&&typeof e.wallet=="string"&&Array.isArray(e.items)&&e.items.length<=100&&e.items.every(t=>h(t)&&typeof t.kind=="string")&&(e.next===null||e.next===void 0||typeof e.next=="string");async function Pe(e,t,o){let s=P(t.wallet??o,"wallet address"),c=`${de}/wallets/${s.toLowerCase()}/activity`;if(t.cursor!==void 0){if(typeof t.cursor!="string"||!/^[0-9]{1,12}-[0-9]{1,6}$/.test(t.cursor))throw new T("Use the nextCursor returned by the previous pons_activity page.");c+=`/before/${t.cursor}`}let a=await U(e,c,Ce),l=typeof a.next=="string"?/\/before\/([0-9]{1,12}-[0-9]{1,6})$/.exec(a.next):null;return{wallet:s,source:`${de}/wallets/{wallet}/activity`,nextCursor:l?.[1]??null,items:a.items.map(r=>({kind:$(r.kind,24),block:m(r.block),time:m(r.time),tx:typeof r.tx=="string"&&/^0x[0-9a-fA-F]{64}$/.test(r.tx)?r.tx:null,token:typeof r.token=="string"&&B.test(r.token)?f(r.token):null,symbol:$(r.symbol,24),amount:typeof r.amount=="string"&&ke.test(r.amount)?r.amount:null,decimals:m(r.decimals),usd:m(r.usd),counterparty:typeof r.counterparty=="string"&&B.test(r.counterparty)?f(r.counterparty):null,counterpartyLabel:$(r.counterparty_label,40)})),note:"Wallet history from Pons\u2019s balances index (discovery and bookkeeping, not proof); USD figures are index estimates. Verify a transaction by hash before relying on it."}}async function Ne(e,t,o){let s=P(t.address??o,"wallet address"),c=j(t.limit,10,20),a=await U(e,`${x}/profile/${s.toLowerCase()}?view=card`,h),l=h(a.identity)?a.identity:{},r=await U(e,`${x}/launches?deployer=${s.toLowerCase()}&limit=${c}`,i=>h(i)&&Array.isArray(i.items)&&i.items.length<=100&&i.items.every(n=>h(n)&&typeof n.address=="string"&&B.test(n.address)&&typeof n.factory=="string"&&B.test(n.factory))),p=await e.clientFor(w).getBlockNumber({cacheTime:0}),g=r.items.filter(i=>v(i.factory,F)).slice(0,c);return{address:s,hidden:a.hidden===!0,source:`${x}/profile/{address}?view=card`,identity:{username:$(l.username,40),displayName:$(l.displayName,60),description:$(l.description,200),joinedAt:m(l.joinedAt)},launches:await Promise.all(g.map(i=>Y(e,f(i.address),p))),statusBlock:p.toString(),note:"Profile text is user-supplied and untrusted. Created launches come from Pons\u2019s index and were re-read on chain from the pinned factory."}}async function _e(e,t,o){let s=P(t.token,"Pons launch token address"),c=P(t.holder??o,"holder address"),a=e.clientFor(w),l=await a.getBlockNumber({cacheTime:0}),r=await E(e,s,l),p=ne[w].pons.buybackVault.address,g=[],i=async(y,K)=>{try{return await K()}catch{return g.push(y),null}},n=y=>i(y,()=>a.readContract({address:r.curve,abi:Q,functionName:y,blockNumber:l})),u=y=>i(y,()=>a.readContract({address:r.curve,abi:Q,functionName:y,blockNumber:l})),k=y=>i(y,()=>a.readContract({address:p,abi:ue,functionName:y,args:[s],blockNumber:l})),[N,R,G,q,W,_,A,V,H,d,b,D,pe,fe]=await Promise.all([n("sellableTokens"),n("reservedTokens"),u("readyToGraduate"),u("graduated"),i("currentSnipeTaxBps",()=>a.readContract({address:r.curve,abi:Q,functionName:"currentSnipeTaxBps",args:[c],blockNumber:l})),i("getTokenInfo",()=>a.readContract({address:s,abi:he,functionName:"getTokenInfo",blockNumber:l})),i("pendingCreatorFeeRecipient",()=>a.readContract({address:F,abi:ye,functionName:"pendingCreatorFeeRecipient",args:[s],blockNumber:l})),k("totalLocked"),k("totalReleased"),k("vestedAmount"),k("releasable"),k("vestingStart"),i("VESTING_DURATION",()=>a.readContract({address:p,abi:ue,functionName:"VESTING_DURATION",blockNumber:l})),J(e,s,l)]),S=y=>y===null?null:y.toString(),te=A&&!v(A[0],ee)&&A[1]>0n?{proposedRecipient:f(A[0]),effectiveAt:A[1].toString(),expiresAt:A[2].toString(),note:"A protocol-proposed creator fee recipient change. Holders may react before it takes effect; anyone can execute it after the timelock, within the window."}:A?null:void 0;return{token:fe,phase:r.phase,statusBlock:l.toString(),curve:r.curve,creatorFeeRecipient:r.creatorFeeRecipient,curveCapacity:{sellableTokens:S(N),reservedTokens:S(R),readyToGraduate:G,graduated:q},snipeTaxBps:{recipient:c,current:S(W),note:"Keyed to the wallet that receives the tokens; buys only, large in the opening seconds."},creatorMetadata:_?{deployer:f(_[0]),logo:I(_[1].slice(0,300)),description:I(_[2].slice(0,500)),socials:Object.fromEntries(["twitter","telegram","discord","website","farcaster"].map((y,K)=>[y,I(_[3][K].slice(0,300))]))}:null,pendingTakeover:te===void 0?"unavailable":te,buybackVest:{vault:p,enabled:r.buybackEnabled,locked:S(V),released:S(H),vested:S(d),releasable:S(b),vestingStart:S(D),vestingDurationSeconds:S(pe),note:"Amounts are launch-token base units; releasing is for the vest beneficiaries only (see pons_claim)."},unavailable:g}}async function Be(e,t){let o=P(t.token,"Pons launch token address"),s=j(t.limit,25,100),c=e.clientFor(w),a=await c.getBlockNumber({cacheTime:0}),l=await E(e,o,a),r=t.toBlock===void 0?a:BigInt(String(t.toBlock)),p=t.fromBlock===void 0?r>=me?r-me+1n:0n:BigInt(String(t.fromBlock));if(p<0n||p>r||r>a||r-p+1n>ge)throw new T("Choose an ordered range of at most 10000 mined blocks.");let i=(await c.getLogs({address:l.curve,events:be,fromBlock:p,toBlock:r,strict:!0})).filter(n=>v(n.address,l.curve)&&!n.removed&&n.blockNumber!==null).sort((n,u)=>n.blockNumber===u.blockNumber?(u.logIndex??0)-(n.logIndex??0):n.blockNumber>u.blockNumber?-1:1);return{token:await J(e,o,a),curve:l.curve,fromBlock:p.toString(),toBlock:r.toString(),statusBlock:a.toString(),truncated:i.length>s,total:i.length,trades:i.slice(0,s).map(n=>n.eventName==="CurveBuy"?{side:"buy",block:n.blockNumber.toString(),tx:n.transactionHash,trader:f(n.args.buyer),recipient:f(n.args.recipient),pairIn:n.args.quoteIn.toString(),tokensOut:n.args.tokensOut.toString(),fee:n.args.fee.toString(),creatorTax:n.args.tax.toString()}:{side:"sell",block:n.blockNumber.toString(),tx:n.transactionHash,trader:f(n.args.seller),recipient:f(n.args.recipient),tokensIn:n.args.tokensIn.toString(),pairOut:n.args.quoteOut.toString(),fee:n.args.fee.toString(),creatorTax:n.args.tax.toString()}),coverage:"Curve-phase trades in the requested block window only. Graduated-pool swaps are Uniswap v4 events and are not listed here; pons_activity and pons_status cover a wallet and the pool price."}}var Le=e=>{function t(o,s,c){return{name:o,inputSchema:{type:"object",properties:s,required:["pons_holders","pons_launch_info","pons_trades"].includes(o)?["token"]:[],additionalProperties:!1},execute:async(a,l)=>{try{if(!P(l)||v(l,ee))throw new T("Provide a wallet address.");for(let r of Object.keys(a))if(!(r in s))throw new T(`Unknown ${o} input: ${r}.`);return await c(a,l)}catch(r){throw new T(e.plainError(r))}}}}return{tools:[t("pons_holders",{token:C,holder:{...C,description:"Optional wallet for an on-chain balance and indexed rank after system exclusions."},limit:{type:"integer",minimum:1,maximum:50},cursor:{type:"string",maxLength:128,description:"Filtered-directory nextCursor from pons_holders; restart if the index changes."}},o=>we(e,o)),t("pons_holdings",{holder:C,limit:{type:"integer",minimum:1,maximum:40}},(o,s)=>xe(e,o,s)),t("pons_trending",{limit:{type:"integer",minimum:1,maximum:20}},o=>Se(e,o)),t("pons_analytics",{view:{type:"string",enum:Object.keys(z)}},o=>Te(e,o)),t("pons_activity",{wallet:C,cursor:{type:"string",maxLength:32}},(o,s)=>Pe(e,o,s)),t("pons_launch_info",{token:C,holder:C},(o,s)=>_e(e,o,s)),t("pons_trades",{token:C,fromBlock:X(),toBlock:X(),limit:{type:"integer",minimum:1,maximum:100}},o=>Be(e,o)),t("pons_profile",{address:C,limit:{type:"integer",minimum:1,maximum:20}},(o,s)=>Ne(e,o,s))]}};export{O as a,Le as b};
1
+ import{a as ie,b as le,c as ce,d as Z}from"./AFHHRDPJ.js";import{a as E,b as Y}from"./D6VP3N27.js";import{c as ae}from"./MYBDO5SA.js";import{a as X}from"./UWOFA6GV.js";import{b as B,c as C,d as se,e as h,g as v,i as oe}from"./73N3TOJL.js";import{a as w,i as ne,l as F,n as re}from"./XPFVT2EA.js";import{a as T}from"./5YS5V2LK.js";import{a as I}from"./JXOEJPJ4.js";import{erc20Abi as M,getAddress as f,parseAbi as L,zeroAddress as ee}from"viem";var x="https://ponsfamily.com/api",de="https://balancesapi.ponsfamily.com/v1",Q=L(["function sellableTokens() view returns (uint256)","function reservedTokens() view returns (uint256)","function readyToGraduate() view returns (bool)","function graduated() view returns (bool)","function currentSnipeTaxBps(address) view returns (uint256)"]),be=L(["event CurveBuy(address indexed buyer, address indexed recipient, uint256 quoteIn, uint256 tokensOut, uint256 fee, uint256 tax)","event CurveSell(address indexed seller, address indexed recipient, uint256 tokensIn, uint256 quoteOut, uint256 fee, uint256 tax)"]),ye=L(["function pendingCreatorFeeRecipient(address) view returns (address,uint256,uint256)"]),he=L(["function getTokenInfo() view returns (address,string,string,(string,string,string,string,string))"]),ue=L(["function totalLocked(address) view returns (uint256)","function totalReleased(address) view returns (uint256)","function vestedAmount(address) view returns (uint256)","function releasable(address) view returns (uint256)","function vestingStart(address) view returns (uint256)","function VESTING_DURATION() view returns (uint256)"]),ge=10000n,me=2000n,ke=/^[0-9]{1,78}$/,m=e=>typeof e=="number"&&Number.isFinite(e)?e:null,$=(e,t=80)=>typeof e=="string"?I(e.slice(0,t)):null;function P(e,t="address"){return oe(e,`Provide a ${t}.`,se)}function j(e,t,o){let s=e??t;if(typeof s!="number"||!Number.isInteger(s)||s<1||s>o)throw new T(`Choose a limit from 1 to ${o}.`);return s}function O(e,t=0){return e===null||typeof e=="boolean"?e:typeof e=="number"?Number.isFinite(e)?e:null:typeof e=="string"?I(e.slice(0,80)):t>=3?null:Array.isArray(e)?{total:e.length,items:e.slice(0,10).map(o=>O(o,t+1))}:h(e)?Object.fromEntries(Object.entries(e).filter(([o])=>/^[A-Za-z0-9_]{1,40}$/.test(o)).slice(0,40).map(([o,s])=>[o,O(s,t+1)])):null}async function U(e,t,o){return ae(e.http,t,{method:"GET",redirect:"error",headers:{accept:"application/json"}},o)}async function J(e,t,o){let s=e.clientFor(w),[c,a]=await Promise.all([s.readContract({address:t,abi:M,functionName:"symbol",blockNumber:o}),s.readContract({address:t,abi:M,functionName:"decimals",blockNumber:o})]);return{address:t,chainId:w,symbol:I(c),decimals:a}}async function we(e,t){let o=P(t.token,"Pons launch token address"),s=t.holder===void 0?void 0:P(t.holder,"holder address"),c=j(t.limit,20,50),{offset:a,fingerprint:l}=ce(t.cursor),r=e.clientFor(w),p=await r.getBlockNumber({cacheTime:0}),g=await E(e,o,p),i=await le(e,o),n=await r.getBlockNumber({cacheTime:0});if(l&&l!==i.fingerprint)throw new T("The Pons holder index changed. Retry pons_holders without a cursor.");let u=i.body,k=[{wallet:ee,reason:"burn (zero address)"},{wallet:f("0x000000000000000000000000000000000000dead"),reason:"burn (dead address)"},{wallet:f(g.curve),reason:"Pons bonding curve"},{wallet:f(re),reason:"Uniswap v4 pool manager (shared pool custody)"}],N=new Map(k.map(d=>[d.wallet,d.reason])),R=i.rows.filter(d=>!N.has(f(d.wallet))),[G,q]=await Promise.all([J(e,o,n),r.readContract({address:o,abi:M,functionName:"totalSupply",blockNumber:n})]),W=d=>1+R.filter(b=>BigInt(b.balance)>BigInt(d)).length,_=async(d,b)=>{let D=await r.readContract({address:o,abi:M,functionName:"balanceOf",args:[d],blockNumber:n});return{wallet:d,indexedBalance:b,indexedRank:b===null||N.has(d)?null:W(b),indexedShareOfSupply:b===null?null:Z(b,u.supply),shareOfSupply:Z(D.toString(),q.toString()),balance:{token:G,amount:D.toString()},matchesIndex:b===null?null:D.toString()===b}},A=await Promise.all(R.slice(a,a+c).map(async d=>({...await _(f(d.wallet),d.balance),share:m(d.share),label:$(d.label,40)}))),V=s?i.rows.find(d=>v(d.wallet,s)):void 0,H=s?{...await _(s,V?.balance??null),excluded:N.get(s)??null,rankStatus:N.has(s)?"excluded":V?"ranked by indexed balance":"absent from index; rank unknown"}:void 0;return{token:G,statusBlock:n.toString(),totalSupply:q.toString(),holderCount:R.length,indexHolderCount:u.holders,indexSupply:u.supply,burned:u.burned,circulating:u.circulating,page:A,nextCursor:a+c<R.length?`holders_${a+c}_${i.fingerprint}`:null,...H?{wallet:H}:{},exclusions:k.map(d=>({...d,indexedBalance:i.rows.find(b=>v(b.wallet,d.wallet))?.balance??"0",countedInIndex:i.rows.some(b=>v(b.wallet,d.wallet))})),indexAsOf:{rollupBucket:u.as_of.rollup_bucket,tailFromBlock:u.as_of.tail_from_block},indexFetchedAt:i.fetchedAt,source:`${ie}/tokens/{token}/holders`,sources:{holderCount:"Pons balances index, excluding the labelled system addresses",rank:"Pons balances index, descending balance; equal balances share a rank, system addresses excluded",indexedShareOfSupply:"Pons indexed balance / indexed total supply",balance:`on-chain balanceOf at block ${n}`,totalSupply:`on-chain totalSupply at block ${n}`,shareOfSupply:`on-chain balanceOf / totalSupply at block ${n}`,burned:"Pons balances index",circulating:"Pons balances index"},note:"Counts, ranking, burned and circulating supply come from Pons\u2019s balances index, not on-chain truth. The API does not pin pages to a block; its rollup/tail markers are not an exact snapshot block. Each listed balance was re-read on chain at statusBlock. matchesIndex false indicates disagreement, not proof of which source is wrong. A wallet absent from the index has unknown rank even if its on-chain balance is positive. Labels are untrusted."}}var ve=e=>h(e)&&Array.isArray(e.items)&&e.items.length<=500&&e.items.every(t=>h(t)&&typeof t.token=="string"&&B.test(t.token)&&typeof t.amountTokens=="number");async function xe(e,t,o){let s=P(t.holder??o,"holder address"),c=j(t.limit,20,40),a=e.clientFor(w),l=await U(e,`${x}/profile/${s.toLowerCase()}?view=positions`,ve),r=await a.getBlockNumber({cacheTime:0}),p=[...new Map(l.items.filter(n=>n.amountTokens>0||n.state==="open").map(n=>[n.token.toLowerCase(),n])).values()],g=await Promise.all(p.slice(0,c).map(async n=>{let u=f(n.token);try{await E(e,u,r);let[k,N]=await Promise.all([J(e,u,r),a.readContract({address:u,abi:M,functionName:"balanceOf",args:[s],blockNumber:r})]);return{ok:!0,token:u,meta:k,balance:N,item:n}}catch{return{ok:!1}}})),i=g.filter(n=>n.ok);return{holder:s,statusBlock:r.toString(),source:`${x}/profile/{holder}?view=positions`,holdings:i.map(n=>({token:n.meta,balance:{token:n.meta,amount:n.balance.toString()},index:{state:$(n.item.state,20),valueUsd:m(n.item.valueUsd),investedUsd:m(n.item.investedUsd),totalPnlUsd:m(n.item.totalPnlUsd),totalPnlPct:m(n.item.totalPnlPct),buys:m(n.item.buys),sells:m(n.item.sells),lastTradeAt:m(n.item.lastTradeAt)}})),excludedUnverified:g.length-i.length,truncated:p.length>c,note:"Discovery through Pons\u2019s positions index; every launch was re-read from the pinned factory and every balance is an on-chain read. USD value and profit and loss are index estimates, not execution quotes. Sell the on-chain balance with pons_sell."}}var Ae=e=>h(e)&&Array.isArray(e.items)&&e.items.length<=100&&e.items.every(t=>h(t)&&h(t.launch)&&typeof t.launch.address=="string"&&B.test(t.launch.address)&&typeof t.launch.factory=="string"&&B.test(t.launch.factory));async function Se(e,t){let o=j(t.limit,10,20),s=await U(e,`${x}/launches/trending`,Ae),c=s.items.filter(r=>v(r.launch.factory,F)).slice(0,o),a=await e.clientFor(w).getBlockNumber({cacheTime:0});return{items:await Promise.all(c.map(async r=>({status:await Y(e,f(r.launch.address),a),index:{volumeUsd:m(r.volumeUsd),trades:m(r.trades),traders:m(r.traders),change:m(r.change)}}))),statusBlock:a.toString(),source:`${x}/launches/trending`,excludedOtherFactories:s.items.length-s.items.filter(r=>v(r.launch.factory,F)).length,note:"Ranking is Pons\u2019s own trending list (discovery only); each launch was re-read on chain from the pinned factory."}}var z={overview:"analytics",burn:"analytics/burn",buyback:"analytics/buyback"};async function Te(e,t){let o=t.view??"overview";if(typeof o!="string"||!Object.hasOwn(z,o))throw new T("Choose view overview, burn or buyback.");let s=await U(e,`${x}/${z[o]}`,h);if(o==="overview"){let c=Array.isArray(s.series)?s.series:[];return{view:o,source:`${x}/analytics`,generatedAt:m(s.generatedAt),latestDay:m(s.latestDay),latest:O(c.at(-1)),seriesDays:c.length,today:O(s.today),earnings:O(s.earnings),indexer:O(s.indexer),note:"Protocol-wide figures from Pons\u2019s analytics index; unaudited aggregates, not a quote."}}return{view:o,source:`${x}/${z[o]}`,data:O(s),note:"Protocol-wide figures from Pons\u2019s analytics index; unaudited aggregates, not a quote."}}var Ce=e=>h(e)&&typeof e.wallet=="string"&&Array.isArray(e.items)&&e.items.length<=100&&e.items.every(t=>h(t)&&typeof t.kind=="string")&&(e.next===null||e.next===void 0||typeof e.next=="string");async function Pe(e,t,o){let s=P(t.wallet??o,"wallet address"),c=`${de}/wallets/${s.toLowerCase()}/activity`;if(t.cursor!==void 0){if(typeof t.cursor!="string"||!/^[0-9]{1,12}-[0-9]{1,6}$/.test(t.cursor))throw new T("Use the nextCursor returned by the previous pons_activity page.");c+=`/before/${t.cursor}`}let a=await U(e,c,Ce),l=typeof a.next=="string"?/\/before\/([0-9]{1,12}-[0-9]{1,6})$/.exec(a.next):null;return{wallet:s,source:`${de}/wallets/{wallet}/activity`,nextCursor:l?.[1]??null,items:a.items.map(r=>({kind:$(r.kind,24),block:m(r.block),time:m(r.time),tx:typeof r.tx=="string"&&/^0x[0-9a-fA-F]{64}$/.test(r.tx)?r.tx:null,token:typeof r.token=="string"&&B.test(r.token)?f(r.token):null,symbol:$(r.symbol,24),amount:typeof r.amount=="string"&&ke.test(r.amount)?r.amount:null,decimals:m(r.decimals),usd:m(r.usd),counterparty:typeof r.counterparty=="string"&&B.test(r.counterparty)?f(r.counterparty):null,counterpartyLabel:$(r.counterparty_label,40)})),note:"Wallet history from Pons\u2019s balances index (discovery and bookkeeping, not proof); USD figures are index estimates. Verify a transaction by hash before relying on it."}}async function Ne(e,t,o){let s=P(t.address??o,"wallet address"),c=j(t.limit,10,20),a=await U(e,`${x}/profile/${s.toLowerCase()}?view=card`,h),l=h(a.identity)?a.identity:{},r=await U(e,`${x}/launches?deployer=${s.toLowerCase()}&limit=${c}`,i=>h(i)&&Array.isArray(i.items)&&i.items.length<=100&&i.items.every(n=>h(n)&&typeof n.address=="string"&&B.test(n.address)&&typeof n.factory=="string"&&B.test(n.factory))),p=await e.clientFor(w).getBlockNumber({cacheTime:0}),g=r.items.filter(i=>v(i.factory,F)).slice(0,c);return{address:s,hidden:a.hidden===!0,source:`${x}/profile/{address}?view=card`,identity:{username:$(l.username,40),displayName:$(l.displayName,60),description:$(l.description,200),joinedAt:m(l.joinedAt)},launches:await Promise.all(g.map(i=>Y(e,f(i.address),p))),statusBlock:p.toString(),note:"Profile text is user-supplied and untrusted. Created launches come from Pons\u2019s index and were re-read on chain from the pinned factory."}}async function _e(e,t,o){let s=P(t.token,"Pons launch token address"),c=P(t.holder??o,"holder address"),a=e.clientFor(w),l=await a.getBlockNumber({cacheTime:0}),r=await E(e,s,l),p=ne[w].pons.buybackVault.address,g=[],i=async(y,K)=>{try{return await K()}catch{return g.push(y),null}},n=y=>i(y,()=>a.readContract({address:r.curve,abi:Q,functionName:y,blockNumber:l})),u=y=>i(y,()=>a.readContract({address:r.curve,abi:Q,functionName:y,blockNumber:l})),k=y=>i(y,()=>a.readContract({address:p,abi:ue,functionName:y,args:[s],blockNumber:l})),[N,R,G,q,W,_,A,V,H,d,b,D,pe,fe]=await Promise.all([n("sellableTokens"),n("reservedTokens"),u("readyToGraduate"),u("graduated"),i("currentSnipeTaxBps",()=>a.readContract({address:r.curve,abi:Q,functionName:"currentSnipeTaxBps",args:[c],blockNumber:l})),i("getTokenInfo",()=>a.readContract({address:s,abi:he,functionName:"getTokenInfo",blockNumber:l})),i("pendingCreatorFeeRecipient",()=>a.readContract({address:F,abi:ye,functionName:"pendingCreatorFeeRecipient",args:[s],blockNumber:l})),k("totalLocked"),k("totalReleased"),k("vestedAmount"),k("releasable"),k("vestingStart"),i("VESTING_DURATION",()=>a.readContract({address:p,abi:ue,functionName:"VESTING_DURATION",blockNumber:l})),J(e,s,l)]),S=y=>y===null?null:y.toString(),te=A&&!v(A[0],ee)&&A[1]>0n?{proposedRecipient:f(A[0]),effectiveAt:A[1].toString(),expiresAt:A[2].toString(),note:"A protocol-proposed creator fee recipient change. Holders may react before it takes effect; anyone can execute it after the timelock, within the window."}:A?null:void 0;return{token:fe,phase:r.phase,statusBlock:l.toString(),curve:r.curve,creatorFeeRecipient:r.creatorFeeRecipient,curveCapacity:{sellableTokens:S(N),reservedTokens:S(R),readyToGraduate:G,graduated:q},snipeTaxBps:{recipient:c,current:S(W),note:"Keyed to the wallet that receives the tokens; buys only, large in the opening seconds."},creatorMetadata:_?{deployer:f(_[0]),logo:I(_[1].slice(0,300)),description:I(_[2].slice(0,500)),socials:Object.fromEntries(["twitter","telegram","discord","website","farcaster"].map((y,K)=>[y,I(_[3][K].slice(0,300))]))}:null,pendingTakeover:te===void 0?"unavailable":te,buybackVest:{vault:p,enabled:r.buybackEnabled,locked:S(V),released:S(H),vested:S(d),releasable:S(b),vestingStart:S(D),vestingDurationSeconds:S(pe),note:"Amounts are launch-token base units; releasing is for the vest beneficiaries only (see pons_claim)."},unavailable:g}}async function Be(e,t){let o=P(t.token,"Pons launch token address"),s=j(t.limit,25,100),c=e.clientFor(w),a=await c.getBlockNumber({cacheTime:0}),l=await E(e,o,a),r=t.toBlock===void 0?a:BigInt(String(t.toBlock)),p=t.fromBlock===void 0?r>=me?r-me+1n:0n:BigInt(String(t.fromBlock));if(p<0n||p>r||r>a||r-p+1n>ge)throw new T("Choose an ordered range of at most 10000 mined blocks.");let i=(await c.getLogs({address:l.curve,events:be,fromBlock:p,toBlock:r,strict:!0})).filter(n=>v(n.address,l.curve)&&!n.removed&&n.blockNumber!==null).sort((n,u)=>n.blockNumber===u.blockNumber?(u.logIndex??0)-(n.logIndex??0):n.blockNumber>u.blockNumber?-1:1);return{token:await J(e,o,a),curve:l.curve,fromBlock:p.toString(),toBlock:r.toString(),statusBlock:a.toString(),truncated:i.length>s,total:i.length,trades:i.slice(0,s).map(n=>n.eventName==="CurveBuy"?{side:"buy",block:n.blockNumber.toString(),tx:n.transactionHash,trader:f(n.args.buyer),recipient:f(n.args.recipient),pairIn:n.args.quoteIn.toString(),tokensOut:n.args.tokensOut.toString(),fee:n.args.fee.toString(),creatorTax:n.args.tax.toString()}:{side:"sell",block:n.blockNumber.toString(),tx:n.transactionHash,trader:f(n.args.seller),recipient:f(n.args.recipient),tokensIn:n.args.tokensIn.toString(),pairOut:n.args.quoteOut.toString(),fee:n.args.fee.toString(),creatorTax:n.args.tax.toString()}),coverage:"Curve-phase trades in the requested block window only. Graduated-pool swaps are Uniswap v4 events and are not listed here; pons_activity and pons_status cover a wallet and the pool price."}}var Le=e=>{function t(o,s,c){return{name:o,inputSchema:{type:"object",properties:s,required:["pons_holders","pons_launch_info","pons_trades"].includes(o)?["token"]:[],additionalProperties:!1},execute:async(a,l)=>{try{if(!P(l)||v(l,ee))throw new T("Provide a wallet address.");for(let r of Object.keys(a))if(!(r in s))throw new T(`Unknown ${o} input: ${r}.`);return await c(a,l)}catch(r){throw new T(e.plainError(r))}}}}return{tools:[t("pons_holders",{token:C,holder:{...C,description:"Optional wallet for an on-chain balance and indexed rank after system exclusions."},limit:{type:"integer",minimum:1,maximum:50},cursor:{type:"string",maxLength:128,description:"Filtered-directory nextCursor from pons_holders; restart if the index changes."}},o=>we(e,o)),t("pons_holdings",{holder:C,limit:{type:"integer",minimum:1,maximum:40}},(o,s)=>xe(e,o,s)),t("pons_trending",{limit:{type:"integer",minimum:1,maximum:20}},o=>Se(e,o)),t("pons_analytics",{view:{type:"string",enum:Object.keys(z)}},o=>Te(e,o)),t("pons_activity",{wallet:C,cursor:{type:"string",maxLength:32}},(o,s)=>Pe(e,o,s)),t("pons_launch_info",{token:C,holder:C},(o,s)=>_e(e,o,s)),t("pons_trades",{token:C,fromBlock:X(),toBlock:X(),limit:{type:"integer",minimum:1,maximum:100}},o=>Be(e,o)),t("pons_profile",{address:C,limit:{type:"integer",minimum:1,maximum:20}},(o,s)=>Ne(e,o,s))]}};export{O as a,Le as b};
@@ -1 +1 @@
1
- import{a as N}from"./XW7RH7YY.js";import{a as E}from"./2O6A6WEX.js";import{b as q,c as _,d as O,e as R}from"./VCWDJQDE.js";import{a as I}from"./JRVTSGAT.js";import{c as M}from"./EC5W3UZD.js";import{b as G}from"./AXYOJBX6.js";import{a as b}from"./6IM6A5VA.js";import{a as x}from"./RETS2ZEK.js";import{a as o,d as P,i as U,j as y}from"./XPFVT2EA.js";import{a as r}from"./5YS5V2LK.js";import{encodeFunctionData as g,erc20Abi as k,parseAbi as L}from"viem";var i=U[o].vaults.steakhouse.address,j=(1n<<256n)-1n,l=L(["function asset() view returns (address)","function totalAssets() view returns (uint256)","function convertToAssets(uint256 shares) view returns (uint256 assets)","function previewWithdraw(uint256 assets) view returns (uint256 shares)","function deposit(uint256 assets,address receiver) returns (uint256 shares)","function withdraw(uint256 assets,address receiver,address owner) returns (uint256 shares)","function redeem(uint256 shares,address receiver,address owner) returns (uint256 assets)"]);function A(e){if(typeof e!="bigint"||e<0n||e>j)throw new r("The vault returned an invalid base-unit amount.");return e}function T(e){if(typeof e!="string")throw new r("Amount must be an integer string in base units.");let c=x(e);if(c===0n)throw new r("Amount must be positive.");if(c>j)throw new r("Amount exceeds the uint256 range.");return c}function D(e,c,h=!1){if(!e||typeof e!="object"||Array.isArray(e)||Object.keys(e).some(w=>!c||!["amount",...h?["force","maxPenaltyAssets","minAmountOut"]:[]].includes(w)))throw new r("Unexpected Steakhouse argument.")}var W=e=>{async function c(t){try{return await t()}catch(s){throw new r(e.plainError(s))}}async function h(){let t=e.clientFor(o);if(await t.getChainId()!==o)throw new r("Steakhouse requires chain 4663.");let s=await t.readContract({address:i,abi:l,functionName:"asset"});if(typeof s!="string"||s.toLowerCase()!==y.toLowerCase())throw new r("The Steakhouse vault asset does not match USDG on chain 4663.");let[a,n]=await Promise.all([t.readContract({address:y,abi:k,functionName:"decimals"}),t.readContract({address:i,abi:k,functionName:"decimals"})]);if(a!==P||!Number.isInteger(n)||n<0||n>255)throw new r("The vault returned invalid asset or share decimals.");return{client:t,asset:{address:y,symbol:"USDG",decimals:a,chainId:o},shares:{address:i,symbol:"steakUSDG",decimals:n,chainId:o}}}async function w(t,s){return A(await t.readContract({address:i,abi:k,functionName:"balanceOf",args:[s]}))}async function C(t,s,a){let n=await e.preview(t,s);if(n.changes.length===0)throw new r("The Steakhouse simulation returned no token balance changes.");let u=n.changes.map(({token:m,amount:d})=>{let f=d.startsWith("-"),p=e.formatAmount(f?d.slice(1):d,m.decimals);return`${f?"-":""}${p} ${m.symbol} (${m.address}, chain ${m.chainId}, decimals ${m.decimals})`});return{txs:t,summary:`${a} ${n.summary} Changes: ${u.join("; ")}.`}}return{tools:[_(e,"steakhouse_details",i),I(e,"steakhouse_analytics",i),E(e,"steakhouse_manage",i),...N(e,"steakhouse",i),{name:"steakhouse_list",inputSchema:{type:"object",properties:{},additionalProperties:!1},execute:async t=>c(async()=>{D(t,!1);let{client:s,asset:a,shares:n}=await h(),u=A(await s.readContract({address:i,abi:l,functionName:"totalAssets"}));return[{name:"Steakhouse USDG",vault:n,asset:a,totalAssets:{token:a,amount:u.toString()}}]})},{name:"steakhouse_deposit",inputSchema:$(!1),execute:async(t,s)=>c(async()=>{D(t,!0);let a=T(t.amount);b(s);let{asset:n}=await h(),u=[e.approval(n.address,i,a.toString(),o),e.unsignedTx({to:i,data:g({abi:l,functionName:"deposit",args:[a,s]}),value:"0",chainId:o,description:`Deposit ${e.formatAmount(a.toString(),n.decimals)} USDG into Steakhouse.`})];return C(u,s,"Approve the exact USDG amount, then deposit into Steakhouse.")})},{name:"steakhouse_withdraw",inputSchema:{...$(!0),properties:{...$(!0).properties,force:{type:"boolean",description:"Explicitly plan a full Morpho V2 force exit with penalty disclosure."},maxPenaltyAssets:{type:"string",pattern:"^[0-9]+$"},minAmountOut:{type:"string",pattern:"^[0-9]+$"}}},execute:async(t,s)=>c(async()=>{D(t,!0,!0);let a=t.amount==="max"?null:T(t.amount);b(s);let{client:n,asset:u,shares:m}=await h(),d=await w(n,s);if(d===0n)throw new r("The wallet has no Steakhouse shares to withdraw.");if(t.force!==void 0&&typeof t.force!="boolean")throw new r("force must be a boolean.");if(t.force===!0){if(a!==null)throw new r("Force exit currently requires amount max.");let p=M(t.maxPenaltyAssets),F=T(t.minAmountOut),v=await q(e,n,i,s,d,p),S=await e.preview([v.tx],s);return R(S.changes,i,d,F),{txs:[v.tx],preview:S,summary:`${O(v.plan)} ${S.summary}`}}if(t.maxPenaltyAssets!==void 0||t.minAmountOut!==void 0)throw new r("Penalty and output limits require force true.");let f;if(a===null)f=e.unsignedTx({to:i,data:g({abi:l,functionName:"redeem",args:[d,s,s]}),value:"0",chainId:o,description:`Redeem all ${e.formatAmount(d.toString(),m.decimals)} steakUSDG shares.`});else{let p=A(await n.readContract({address:i,abi:l,functionName:"previewWithdraw",args:[a]}));if(p===0n||p>d)throw new r("The withdrawal exceeds the available share balance or has an invalid share quote.");f=e.unsignedTx({to:i,data:g({abi:l,functionName:"withdraw",args:[a,s,s]}),value:"0",chainId:o,description:`Withdraw ${e.formatAmount(a.toString(),u.decimals)} USDG from Steakhouse.`})}return C([f],s,a===null?"Redeem the current full share balance from Steakhouse.":"Withdraw the requested USDG amount from Steakhouse.")})}],positions:t=>c(async()=>{b(t);let{client:s,asset:a,shares:n}=await h(),u=await w(s,t);if(u===0n)return[];let m=A(await s.readContract({address:i,abi:l,functionName:"convertToAssets",args:[u]}));return[{module:"steakhouse",id:`${o}:${i.toLowerCase()}`,chainId:o,assets:[{token:a,amount:m.toString()}],description:`${e.formatAmount(u.toString(),n.decimals)} steakUSDG shares (${i}, chain ${o}, decimals ${n.decimals}); USDG conversion is indicative, not guaranteed exit liquidity.`}]})}};function $(e){return{type:"object",additionalProperties:!1,required:["amount"],properties:{amount:{type:"string",pattern:e?"^(?:[0-9]+|max)$":"^[0-9]+$",description:`USDG base-unit integer string (6 decimals)${e?", or max to redeem every share":""}.`}}}}var te=e=>G("steakhouse",[W(e)]);export{W as a,te as b};
1
+ import{a as N}from"./XW7RH7YY.js";import{a as E}from"./G4PDM3MX.js";import{b as q,c as _,d as O,e as R}from"./KQFDLDHL.js";import{a as I}from"./JRVTSGAT.js";import{c as M}from"./EC5W3UZD.js";import{b as G}from"./AXYOJBX6.js";import{a as b}from"./6IM6A5VA.js";import{a as x}from"./RETS2ZEK.js";import{a as o,d as P,i as U,j as y}from"./XPFVT2EA.js";import{a as r}from"./5YS5V2LK.js";import{encodeFunctionData as g,erc20Abi as k,parseAbi as L}from"viem";var i=U[o].vaults.steakhouse.address,j=(1n<<256n)-1n,l=L(["function asset() view returns (address)","function totalAssets() view returns (uint256)","function convertToAssets(uint256 shares) view returns (uint256 assets)","function previewWithdraw(uint256 assets) view returns (uint256 shares)","function deposit(uint256 assets,address receiver) returns (uint256 shares)","function withdraw(uint256 assets,address receiver,address owner) returns (uint256 shares)","function redeem(uint256 shares,address receiver,address owner) returns (uint256 assets)"]);function A(e){if(typeof e!="bigint"||e<0n||e>j)throw new r("The vault returned an invalid base-unit amount.");return e}function T(e){if(typeof e!="string")throw new r("Amount must be an integer string in base units.");let c=x(e);if(c===0n)throw new r("Amount must be positive.");if(c>j)throw new r("Amount exceeds the uint256 range.");return c}function D(e,c,h=!1){if(!e||typeof e!="object"||Array.isArray(e)||Object.keys(e).some(w=>!c||!["amount",...h?["force","maxPenaltyAssets","minAmountOut"]:[]].includes(w)))throw new r("Unexpected Steakhouse argument.")}var W=e=>{async function c(t){try{return await t()}catch(s){throw new r(e.plainError(s))}}async function h(){let t=e.clientFor(o);if(await t.getChainId()!==o)throw new r("Steakhouse requires chain 4663.");let s=await t.readContract({address:i,abi:l,functionName:"asset"});if(typeof s!="string"||s.toLowerCase()!==y.toLowerCase())throw new r("The Steakhouse vault asset does not match USDG on chain 4663.");let[a,n]=await Promise.all([t.readContract({address:y,abi:k,functionName:"decimals"}),t.readContract({address:i,abi:k,functionName:"decimals"})]);if(a!==P||!Number.isInteger(n)||n<0||n>255)throw new r("The vault returned invalid asset or share decimals.");return{client:t,asset:{address:y,symbol:"USDG",decimals:a,chainId:o},shares:{address:i,symbol:"steakUSDG",decimals:n,chainId:o}}}async function w(t,s){return A(await t.readContract({address:i,abi:k,functionName:"balanceOf",args:[s]}))}async function C(t,s,a){let n=await e.preview(t,s);if(n.changes.length===0)throw new r("The Steakhouse simulation returned no token balance changes.");let u=n.changes.map(({token:m,amount:d})=>{let f=d.startsWith("-"),p=e.formatAmount(f?d.slice(1):d,m.decimals);return`${f?"-":""}${p} ${m.symbol} (${m.address}, chain ${m.chainId}, decimals ${m.decimals})`});return{txs:t,summary:`${a} ${n.summary} Changes: ${u.join("; ")}.`}}return{tools:[_(e,"steakhouse_details",i),I(e,"steakhouse_analytics",i),E(e,"steakhouse_manage",i),...N(e,"steakhouse",i),{name:"steakhouse_list",inputSchema:{type:"object",properties:{},additionalProperties:!1},execute:async t=>c(async()=>{D(t,!1);let{client:s,asset:a,shares:n}=await h(),u=A(await s.readContract({address:i,abi:l,functionName:"totalAssets"}));return[{name:"Steakhouse USDG",vault:n,asset:a,totalAssets:{token:a,amount:u.toString()}}]})},{name:"steakhouse_deposit",inputSchema:$(!1),execute:async(t,s)=>c(async()=>{D(t,!0);let a=T(t.amount);b(s);let{asset:n}=await h(),u=[e.approval(n.address,i,a.toString(),o),e.unsignedTx({to:i,data:g({abi:l,functionName:"deposit",args:[a,s]}),value:"0",chainId:o,description:`Deposit ${e.formatAmount(a.toString(),n.decimals)} USDG into Steakhouse.`})];return C(u,s,"Approve the exact USDG amount, then deposit into Steakhouse.")})},{name:"steakhouse_withdraw",inputSchema:{...$(!0),properties:{...$(!0).properties,force:{type:"boolean",description:"Explicitly plan a full Morpho V2 force exit with penalty disclosure."},maxPenaltyAssets:{type:"string",pattern:"^[0-9]+$"},minAmountOut:{type:"string",pattern:"^[0-9]+$"}}},execute:async(t,s)=>c(async()=>{D(t,!0,!0);let a=t.amount==="max"?null:T(t.amount);b(s);let{client:n,asset:u,shares:m}=await h(),d=await w(n,s);if(d===0n)throw new r("The wallet has no Steakhouse shares to withdraw.");if(t.force!==void 0&&typeof t.force!="boolean")throw new r("force must be a boolean.");if(t.force===!0){if(a!==null)throw new r("Force exit currently requires amount max.");let p=M(t.maxPenaltyAssets),F=T(t.minAmountOut),v=await q(e,n,i,s,d,p),S=await e.preview([v.tx],s);return R(S.changes,i,d,F),{txs:[v.tx],preview:S,summary:`${O(v.plan)} ${S.summary}`}}if(t.maxPenaltyAssets!==void 0||t.minAmountOut!==void 0)throw new r("Penalty and output limits require force true.");let f;if(a===null)f=e.unsignedTx({to:i,data:g({abi:l,functionName:"redeem",args:[d,s,s]}),value:"0",chainId:o,description:`Redeem all ${e.formatAmount(d.toString(),m.decimals)} steakUSDG shares.`});else{let p=A(await n.readContract({address:i,abi:l,functionName:"previewWithdraw",args:[a]}));if(p===0n||p>d)throw new r("The withdrawal exceeds the available share balance or has an invalid share quote.");f=e.unsignedTx({to:i,data:g({abi:l,functionName:"withdraw",args:[a,s,s]}),value:"0",chainId:o,description:`Withdraw ${e.formatAmount(a.toString(),u.decimals)} USDG from Steakhouse.`})}return C([f],s,a===null?"Redeem the current full share balance from Steakhouse.":"Withdraw the requested USDG amount from Steakhouse.")})}],positions:t=>c(async()=>{b(t);let{client:s,asset:a,shares:n}=await h(),u=await w(s,t);if(u===0n)return[];let m=A(await s.readContract({address:i,abi:l,functionName:"convertToAssets",args:[u]}));return[{module:"steakhouse",id:`${o}:${i.toLowerCase()}`,chainId:o,assets:[{token:a,amount:m.toString()}],description:`${e.formatAmount(u.toString(),n.decimals)} steakUSDG shares (${i}, chain ${o}, decimals ${n.decimals}); USDG conversion is indicative, not guaranteed exit liquidity.`}]})}};function $(e){return{type:"object",additionalProperties:!1,required:["amount"],properties:{amount:{type:"string",pattern:e?"^(?:[0-9]+|max)$":"^[0-9]+$",description:`USDG base-unit integer string (6 decimals)${e?", or max to redeem every share":""}.`}}}}var te=e=>G("steakhouse",[W(e)]);export{W as a,te as b};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oakagentkit/core",
3
- "version": "0.1.9",
3
+ "version": "0.2.0",
4
4
  "type": "module",
5
5
  "license": "SEE LICENSE IN LICENSE",
6
6
  "engines": {
@@ -1 +0,0 @@
1
- import{c as t}from"./UXG67LH3.js";import{c as o}from"./HZUWK5B2.js";function s(e,n,a){return t(e,n,a,o)}export{s as a};
@@ -1 +0,0 @@
1
- import{c as s}from"./MYBDO5SA.js";import{a as n}from"./5HCXZWUH.js";var i=new WeakMap;async function h(a,r,p){let e=new URL(r);if(!(e.origin==="https://aggregator-api.kyberswap.com"&&e.pathname==="/robinhood/api/v1/routes")&&!(e.origin==="https://api.velora.xyz"&&e.pathname==="/prices"))throw new Error("Only supported public price routes may be shared.");let t=i.get(a);t||(t=new n(3e3),i.set(a,t));let o=await t.read(r,()=>s(a,r,{method:"GET"},p));return{value:o.value,expiresAt:Math.floor(o.started/1e3)+60}}export{h as a};
@@ -1 +0,0 @@
1
- import{a as ee,d as te,e as ne}from"./HQVC6X3T.js";import{b as oe}from"./ZQI7B2Z7.js";import{b as T}from"./XCFA73P2.js";import{a as f,b as U,c as q}from"./6IM6A5VA.js";import{c as H}from"./HIMVOTIU.js";import{a as o,d as J}from"./RETS2ZEK.js";import{a as x,i as V,w as $,x as y,y as Y,z as Z}from"./XPFVT2EA.js";import{a as r}from"./5YS5V2LK.js";import{decodeFunctionData as F,encodeFunctionData as P,parseAbi as ae}from"viem";var fe=60,G=50,Pe=200;var we="0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE",j="0x0000000000000000000000000000000000000000",B=V[4663].routes.kyberswap.address,L=V[4663].routes.velora.address,W=$[4663].kyberswap.toLowerCase(),se=$[4663].velora.toLowerCase(),Ae="0x0000000000000000000000000000000000000000000000000000000000000000",Q=ae(["function swap((address callTarget, address approveTarget, bytes targetData, (address srcToken, address dstToken, address[] srcReceivers, uint256[] srcAmounts, address[] feeReceivers, uint256[] feeAmounts, address dstReceiver, uint256 amount, uint256 minReturnAmount, uint256 flags, bytes permit) desc, bytes clientData) execution) payable returns (uint256 returnAmount, uint256 gasUsed)"]),_=ae(["function swapExactAmountIn(address executor, (address srcToken, address destToken, uint256 fromAmount, uint256 toAmount, uint256 quotedAmount, bytes32 metadata, address beneficiary) swapData, uint256 partnerAndFee, bytes permit, bytes executorData) payable returns (uint256 receivedAmount, uint256 submittedAmount, uint256 augustusFeeAmount)"]),E=class extends r{name="NoRouteError";constructor(t="No swap route is available for this token pair and amount."){super(t)}},R=class extends r{name="ExpiredQuoteError";constructor(t="Quote has expired. Request a fresh quote."){super(t)}},ge=1e3,h=new Map;function ie(e){for(let[t,n]of h)BigInt(e)>=o(n.expiresAt)&&h.delete(t)}function K(e){return{...e,...e.sourcePoolRoute!==void 0?{sourcePoolRoute:structuredClone(e.sourcePoolRoute)}:{},...e.txs?{txs:e.txs.map(t=>({...t}))}:{}}}function re(e){let t=K(e);return t.txs&&(t.txs.forEach(Object.freeze),Object.freeze(t.txs)),Object.freeze(t)}var ve=["router","from","to","wallet","amountIn","amountOut","minAmountOut","expiresAt","chainId","spender","value","ponsCurveToken","ponsPoolToken","blockNumber","calldataMinAmountOut","expectedSpend","expectedRefund"];function M(e,t,n=!1){for(let s of ve)if(!(s==="expiresAt"&&n&&o(e.expiresAt)<=o(t.expiresAt))&&e[s]!==void 0&&String(e[s]).toLowerCase()!==String(t[s]).toLowerCase())throw new r(`Quote ${s} does not match the accepted quote.`)}function N(e=Date.now){let t=e();if(!Number.isFinite(t)||t<0)throw new r("Clock must return a non-negative timestamp.");return t>1e11?Math.floor(t/1e3):Math.floor(t)}function C(e){let t=e.toLowerCase();return t===we.toLowerCase()||t===j.toLowerCase()}function Se(e,t=G){if(!Number.isInteger(t)||t<0||t>=1e4)throw new r("Slippage must be an integer from 0 to 9999 bps.");return J(e,String(1e4-t),"10000","floor")}var he=200;function Le(e){if(typeof e!="number"||!Number.isFinite(e)||!/^\d+(?:\.\d{1,2})?$/.test(String(e)))throw new r("Velora returned an unsupported venue fee. Request a fresh quote.");let[t,n=""]=String(e).split("."),s=Number(t)*100+Number(n.padEnd(2,"0"));return X(s),s}function X(e){if(!Number.isInteger(e)||e<0||e>he)throw new r("Velora returned an unsupported venue fee. Request a fresh quote.")}function ue(e,t=1){return X(t),o(e)*10000n/BigInt(1e4-t)+1n}function be(e,t){X(t);let n=e>>96n,s=Y>>96n,a=0x3fffn,d=1n<<92n,l=e&(1n<<96n)-1n;if(n!==s&&!(n===0n&&t===0)||(l&a)!==BigInt(t)||(l&~(d|a))!==0n)throw new r("Velora partnerAndFee must match the accepted venue fee and recipient.")}function de(e){if(e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak charges 0 swap fee; venue fees must never be counted as Oak income.");let t=e.provider??"venue";return`Venue fee: ${e.venueFee} base units (${e.venueFeeBps} bps) retained by ${t}; Oak swap fee: 0 (venue fee is never Oak income).`}function Oe(e){f(e.from),f(e.to),f(e.wallet);let t=e.callTarget??y[x].kyberswap.address,n=e.approveTarget??j;f(t),f(n);let s=o(e.amountIn),a=o(e.minAmountOut);return P({abi:Q,functionName:"swap",args:[{callTarget:t,approveTarget:n,targetData:e.targetData??"0x",desc:{srcToken:e.from,dstToken:e.to,srcReceivers:C(e.from)?[]:[t],srcAmounts:C(e.from)?[]:[s],feeReceivers:[],feeAmounts:[],dstReceiver:e.wallet,amount:s,minReturnAmount:a,flags:0n,permit:"0x"},clientData:e.clientData??"0x"}]})}function xe(e){f(e.from),f(e.to),f(e.wallet);let t=e.executor??y[x].velora.address;return f(t),P({abi:_,functionName:"swapExactAmountIn",args:[t,{srcToken:e.from,destToken:e.to,fromAmount:o(e.amountIn),toAmount:o(e.minAmountOut),quotedAmount:o(e.amountOut),metadata:e.metadata??Ae,beneficiary:e.wallet},e.partnerAndFee??0n,"0x",e.executorData??"0x"]})}function Ie(e){if(typeof e!="string"||!/^0x([0-9a-fA-F]{2})+$/.test(e)||e.length<10)throw new r("Swap calldata must contain a 4-byte function selector.");let t=e.slice(0,10).toLowerCase();if(t===W)return F({abi:Q,data:e}).args[0].desc.minReturnAmount;if(t===se)return F({abi:_,data:e}).args[1].toAmount;if(t==="0x3593564c")return te(e).swap.amountOutMinimum;let n=F({abi:ee,data:e});if(n.functionName==="buy"||n.functionName==="sell")return n.args[1];throw new r(`Unsupported swap router selector ${t}.`)}function ce(e,t,n=!1){let s=o(t),a=Ie(e);if(a<=0n||s<=0n||a!==s&&!(n&&(a>s||e.slice(0,10).toLowerCase()===W&&a+1n===s)))throw new r(`Built swap calldata minimum output (${a}) does not match the accepted quote minimum (${s}).`);return a}function le(e,t){let{from:n,to:s,wallet:a,amountIn:d}=t;if(!n||!s||!a||d===void 0)throw new r("Accepted quote must include input, output, amount and wallet.");for(let u of[n,s,a,t.router,e.to])f(u);let l=(u,m,A)=>{if(u.toLowerCase()!==m.toLowerCase())throw new r(`Built swap ${A} does not match the accepted quote.`)};if(l(e.to,t.router,"router"),e.chainId!==(t.chainId??x))throw new r("Built swap chain does not match the accepted quote.");let g=C(n)?o(d):0n;if(o(e.value)!==g||t.value!==void 0&&o(t.value)!==g)throw new r("Built swap value does not match the accepted quote input.");let w=e.data.slice(0,10).toLowerCase(),i=t.router.toLowerCase(),p;if(i===B.toLowerCase()&&w===W){l(t.spender??t.router,B,"spender");let u=F({abi:Q,data:e.data});if(P({abi:Q,...u}).toLowerCase()!==e.data.toLowerCase())throw new r("KyberSwap calldata must be canonically decodable.");let{callTarget:m,approveTarget:A,desc:c}=u.args[0];l(m,y[x].kyberswap.address,"executor"),l(A,j,"executor approval target");let b=C(n);if(c.srcReceivers.length!==c.srcAmounts.length||(b?c.srcReceivers.length!==0:c.srcReceivers.length===0||c.srcAmounts.some(v=>v<=0n)||c.srcAmounts.reduce((v,S)=>v+S,0n)!==o(d)))throw new r("KyberSwap source transfers must send the exact input to the pinned executor or verified input pool.");for(let v of c.srcReceivers)if(v.toLowerCase()!==m.toLowerCase()&&!oe(n,v,e.data))throw new r(`KyberSwap source transfers: receiver ${v} is not a verified input pool or the pinned executor.`);if(c.feeReceivers.length||c.feeAmounts.length||c.flags!==0n&&c.flags!==512n||c.permit!=="0x")throw new r("KyberSwap fee recipients, fee amounts, flags and permit must match the pinned zero-fee policy.");p={from:c.srcToken,to:c.dstToken,wallet:c.dstReceiver,amount:c.amount}}else if(i===L.toLowerCase()&&w===se){l(t.spender??t.router,L,"spender");let u=F({abi:_,data:e.data});if(P({abi:_,...u}).toLowerCase()!==e.data.toLowerCase())throw new r("Velora calldata must be canonically decodable.");let[m,A,c,b]=u.args;if(!Z.some(v=>v.toLowerCase()===m.toLowerCase()))throw new r("Built swap executor does not match the accepted quote.");if(b!=="0x")throw new r("Velora permit must match the pinned empty-permit policy.");if((t.calldataMinAmountOut!==void 0||c!==0n)&&be(c,t.venueFeeBps??0),t.calldataMinAmountOut!==void 0&&o(t.calldataMinAmountOut)!==ue(t.minAmountOut,t.venueFeeBps??1))throw new r("Velora calldata minimum must cover the accepted net output, venue fee and router dust.");if(t.calldataMinAmountOut!==void 0&&(A.quotedAmount!==o(t.grossAmountOut??"0")||A.quotedAmount<o(t.calldataMinAmountOut)))throw new r("Velora quoted gross output must match the accepted quote and cover its calldata minimum.");if(c!==0n&&t.calldataMinAmountOut===void 0)throw new r("Velora venue fee requires a fee-adjusted calldata minimum.");p={from:A.srcToken,to:A.destToken,wallet:A.beneficiary,amount:A.fromAmount}}else if(t.provider==="pons"&&(t.ponsPoolToken||t.ponsCurveToken))p=ne(e,{...t,from:n,to:s,wallet:a});else throw new r("Built swap selector does not match the accepted router.");if(l(p.from,n,"input token"),l(p.to,s,"output token"),l(p.wallet,a,"recipient"),p.amount!==o(d))throw new r("Built swap input amount does not match the accepted quote.");ce(e.data,t.calldataMinAmountOut??t.minAmountOut,i===B.toLowerCase())}function z(e,t={}){if(!e||typeof e.quoteId!="string"||!e.quoteId.trim())throw new r("Quote must include a non-empty quoteId.");if(f(e.router),e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak charges 0 swap fee; venue fees must never be counted as Oak income.");let n=o(e.amountOut),s=e.destAmountAfterFee??e.netAmountOut,a,d,l;if(s!==void 0){if(d=o(s),a=e.grossAmountOut!==void 0?o(e.grossAmountOut):n>=d?n:d,a<d)throw new r("Gross output cannot be less than net output.");l=e.venueFee!==void 0?o(e.venueFee):a-d}else if(e.grossAmountOut!==void 0){if(a=o(e.grossAmountOut),d=n,a<d)throw new r("Gross output cannot be less than net output.");l=e.venueFee!==void 0?o(e.venueFee):a-d}else e.venueFee!==void 0?(l=o(e.venueFee),d=n,a=d+l):(d=n,a=n,l=0n);if(d<=0n)throw new E("Quote output amount must be positive.");let g=t.slippageBps??e.slippageBps??G,w=e.minAmountOut!==void 0?o(e.minAmountOut):o(Se(d.toString(),g));if(w<=0n||w>a)throw new r("Quote minAmountOut must be positive and not exceed gross output.");if((t.provider??e.provider)==="velora"&&e.calldataMinAmountOut!==void 0){if(o(e.calldataMinAmountOut)!==ue(w.toString(),e.venueFeeBps??1)||o(e.calldataMinAmountOut)>a)throw new r("Velora calldata minimum must cover the accepted net output, venue fee and router dust.")}else if(e.calldataMinAmountOut!==void 0||e.ponsCurveToken!==void 0){if((t.provider??e.provider)!=="pons"||!e.ponsCurveToken)throw new r("Curve minimum requires a Pons curve quote.");f(e.ponsCurveToken);let O=o(t.amountIn??e.amountIn??"0"),I=o(e.expectedSpend??"0"),me=o(e.expectedRefund??"0"),pe=o(e.calldataMinAmountOut??"0");if(O<=0n||I<=0n||I+me!==O||pe*I/O!==w)throw new r("Pons actual minimum and refund do not match the encoded minimum.")}let i=N(t.now),p=BigInt(i+fe),u=e.expiresAt!==void 0?o(e.expiresAt):p,m=(u>p?p:u).toString(),A=l.toString(),c=e.venueFeeBps??(a>0n&&l>0n?Number((l*10000n+a/2n)/a):0),b=t.provider??e.provider??(e.router.toLowerCase()===L.toLowerCase()?"velora":"kyberswap"),v=b==="pons"&&e.feeDisclosure?e.feeDisclosure:de({provider:b,venueFee:A,venueFeeBps:c,oakFee:"0"}),S={...e,quoteId:e.quoteId,amountOut:d.toString(),minAmountOut:w.toString(),router:e.router,expiresAt:m,provider:b,grossAmountOut:a.toString(),destAmountAfterFee:d.toString(),netAmountOut:d.toString(),venueFee:A,venueFeeBps:c,oakFee:"0",feeDisclosure:v,...t.from??e.from?{from:T(t.from??e.from)}:{},...t.to??e.to?{to:T(t.to??e.to)}:{},...t.amountIn??e.amountIn?{amountIn:t.amountIn??e.amountIn}:{},...t.wallet??e.wallet?{wallet:t.wallet??e.wallet}:{},slippageBps:g,chainId:t.chainId??e.chainId??x,spender:e.spender??e.router,...t.allowance??e.allowance?{allowance:t.allowance??e.allowance}:{}};if(BigInt(i)>=o(m))throw new R;if(t.cache===!1)return S;if(ie(i),BigInt(i)>=o(m))throw new R;let k=h.get(S.quoteId);if(k){M(S,k,!0);let O=re({...k,expiresAt:S.expiresAt});return h.set(O.quoteId,O),K(O)}for(;h.size>=ge;)h.delete(h.keys().next().value);let D=re(S);return h.set(D.quoteId,D),K(D)}async function Qe(e,t,n={}){e={...e},f(e.from),f(e.to),f(e.wallet),e.from=T(e.from),e.to=T(e.to);let s=o(e.amountIn);if(s<=0n)throw new r("Swap amountIn must be greater than zero.");let a=e.slippageBps??G;if(!Number.isInteger(a)||a<0||a>=1e4)throw new r("Slippage must be an integer from 0 to 9999 bps.");if(!Array.isArray(t)||t.length===0)throw new E;let d={from:e.from,to:e.to,amountIn:s.toString(),slippageBps:a},l=await Promise.allSettled(t.map(async i=>{let p=await(i.quotePrices??i.quote).call(i,{...d},e.wallet);return{quote:z(p,{provider:i.name,from:e.from,to:e.to,amountIn:s.toString(),wallet:e.wallet,slippageBps:a,chainId:e.chainId??x,allowance:e.allowance,now:e.now,cache:!1}),provider:i}})),g,w=[];for(let i of l)i.status==="rejected"&&(g??=H(i.reason)),i.status==="fulfilled"&&o(i.value.quote.expiresAt)>BigInt(N(e.now))&&w.push(i.value);if(w.length===0)throw g??new E;w.sort((i,p)=>{let m=o(p.quote.amountOut)-o(i.quote.amountOut)||o(p.quote.minAmountOut)-o(i.quote.minAmountOut);return m>0n?1:m<0n?-1:0});for(let{quote:i,provider:p}of w)try{if(BigInt(N(e.now))>=o(i.expiresAt))continue;if(n.deferBuild||!p.prepareQuote)return z(i,{now:e.now});let u=await p.prepareQuote(i.quoteId,e.wallet);if(u.quoteId!==i.quoteId)throw new r("Prepared quote ID does not match the selected route.");if(M(u,i,!0),!u.data)throw new r("Selected route did not return swap calldata.");let m={...i,expiresAt:u.expiresAt,data:u.data,value:u.value,allowance:u.allowance??i.allowance};return le(U({to:m.router,data:u.data,value:u.value??"0",chainId:m.chainId??x,description:"Selected swap route"}),m),z(m,{now:e.now})}catch(u){g??=H(u);continue}throw g??new E}function _e(e,t={}){if(!e||typeof e.quoteId!="string"||!e.quoteId.trim())throw new r("Provide a valid quote to build a swap.");f(e.router);let n=h.get(e.quoteId),s=N(t.now);if(ie(s),!n||BigInt(s)>=o(n.expiresAt))throw h.delete(e.quoteId),new R;if(e.oakFee!==void 0&&o(e.oakFee)!==0n)throw new r("Oak charges 0 swap fee; venue fees must never be counted as Oak income.");M(e,n),M({...n,...t},n);let a=n.from,d=n.to,l=n.amountIn,g=n.wallet;if(!a||!d||!g||l===void 0)throw new r("Accepted quote must include input, output, amount and wallet.");let w=n.chainId??x,i=n.spender??n.router,p=t.allowance??e.allowance??n?.allowance??"0";f(a),f(d),f(g),f(i);let u=o(l);if(u<=0n)throw new r("Swap amountIn must be greater than zero.");let m=o(n.minAmountOut);if(m<=0n)throw new r("Swap minAmountOut must be greater than zero.");let A=e.router.toLowerCase()===L.toLowerCase(),c=t.data??e.data??n?.data??(A?xe({from:a,to:d,amountIn:u.toString(),amountOut:n.amountOut,minAmountOut:m.toString(),wallet:g}):Oe({from:a,to:d,amountIn:u.toString(),minAmountOut:m.toString(),wallet:g}));ce(c,n.calldataMinAmountOut??m.toString(),n.router.toLowerCase()===B.toLowerCase());let b=n.venueFee??"0",v=n.venueFeeBps??0,S=n.provider??(A?"velora":"kyberswap"),k=n.feeDisclosure??de({provider:S,venueFee:b,venueFeeBps:v,oakFee:"0"}),D=C(a),O=t.value??e.value??n?.value??(D?u.toString():"0"),I=U({to:e.router,data:c,value:O,chainId:w,description:`Swap ${u} base units of ${a} for at least ${m} base units of ${d} via ${S} (${e.router}). ${k}`});return le(I,n),D||o(p)>=u?[I]:[q(a,i,u.toString(),w),I]}export{fe as a,G as b,Pe as c,we as d,j as e,Q as f,E as g,R as h,ge as i,K as j,re as k,M as l,N as m,C as n,Se as o,he as p,Le as q,ue as r,be as s,de as t,Oe as u,xe as v,Ie as w,ce as x,le as y,z,Qe as A,_e as B};
@@ -1 +0,0 @@
1
- import{e as b,h as r}from"./73N3TOJL.js";import{b as P}from"./IWALIX7Q.js";import{i as C}from"./XPFVT2EA.js";import{a as y,b as x}from"./5YS5V2LK.js";import{keccak256 as S,parseAbi as D}from"viem";var k=Object.freeze({robinswapV2:"0xa95DA9b9fCef09A07F99444fE9304457d6ECdccA",uniswapV2:"0x8BcEAA40b9aCDfAedf85ADf4fF01f5ad6517937F",uniswapV3:C[4663].uniswap.v3_factory.address}),E=D(["function token0() view returns (address)","function token1() view returns (address)","function factory() view returns (address)","function fee() view returns (uint24)"]),O=D(["function getPair(address,address) view returns (address)","function getPool(address,address,uint24) view returns (address)"]),n=new Map;function z(s,c,a){let i=n.get(S(a));return!!i&&i.expires>Date.now()&&r(i.token,s)&&i.pools.some(u=>r(u,c))}async function B(s,c,a,i,u,V){let w=[...new Set(i.filter(o=>!r(o,u)).map(o=>o.toLowerCase()))];if(!w.length)return;let h=S(V);n.delete(h);let d=await s.getBlockNumber();for(let o of w){let t=e=>new y(`KyberSwap source receiver ${o} is not a verified input pool: ${e}.`),l=Array.isArray(c)?c.map(e=>Array.isArray(e)?e[0]:void 0).find(e=>b(e)&&r(e.pool,o)&&r(e.tokenIn,a)):void 0;if(!b(l)||typeof l.tokenOut!="string")throw t("not named as an input hop in the accepted route");let v=await s.getCode({address:o,blockNumber:d});if(!v||v==="0x")throw t("no deployed code");try{let[e,p,f]=await Promise.all(["token0","token1","factory"].map(m=>s.readContract({address:o,abi:E,functionName:m,blockNumber:d}))),g=r(e,a)?p:r(p,a)?e:void 0;if(!g||!r(g,l.tokenOut))throw t("tokens do not match the input route");let A;if(r(f,k.robinswapV2)||r(f,k.uniswapV2))A=await s.readContract({address:f,abi:O,functionName:"getPair",args:[e,p],blockNumber:d});else if(r(f,k.uniswapV3)){let m=await s.readContract({address:o,abi:E,functionName:"fee",blockNumber:d});A=await s.readContract({address:f,abi:O,functionName:"getPool",args:[e,p,m],blockNumber:d})}else throw t("factory is not pinned");if(!r(A,o))throw t("not registered by the pinned factory")}catch(e){throw e instanceof y||P(e)?e:x(e,3)?t("pool token or factory read reverted; this pool interface is not supported by Oak"):t("on-chain verification unavailable")}}for(let[o,t]of n)t.expires<=Date.now()&&n.delete(o);n.size>=1e3&&n.delete(n.keys().next().value),n.set(h,{token:a,pools:w,expires:Date.now()+6e4})}export{k as a,z as b,B as c};