@oracle-agent/oracle 0.35.43 → 0.35.44

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 (63) hide show
  1. package/dist/agent-sessions.mjs +19 -19
  2. package/dist/assets/skills/oracle-desk-product/SKILL.md +1 -1
  3. package/dist/bin/desk-server.mjs +28 -28
  4. package/dist/bin/oracle-data-mcp.mjs +19 -19
  5. package/dist/bin/oracle-gateway.mjs +42 -42
  6. package/dist/bin/oracle-investigate.mjs +5 -5
  7. package/dist/bin/oracle-launch-radar-shadow.mjs +6 -6
  8. package/dist/bin/oracle-mev-arb-shadow.mjs +6 -6
  9. package/dist/bin/oracle-mev-shadow.mjs +6 -6
  10. package/dist/bin/oracle-public-server.mjs +5 -5
  11. package/dist/bin/oracle-route.mjs +18 -18
  12. package/dist/bin/oracle-scan.mjs +11 -11
  13. package/dist/bin/oracle.mjs +12 -12
  14. package/dist/cli/commands/agent-session.mjs +21 -21
  15. package/dist/cli/commands/airdrop.mjs +10 -10
  16. package/dist/cli/commands/chat.mjs +218 -217
  17. package/dist/cli/commands/data.mjs +244 -8
  18. package/dist/cli/commands/doctor.mjs +5 -5
  19. package/dist/cli/commands/eval.mjs +157 -153
  20. package/dist/cli/commands/extension-policy.mjs +1 -1
  21. package/dist/cli/commands/farm.mjs +17 -17
  22. package/dist/cli/commands/fees.mjs +3 -3
  23. package/dist/cli/commands/follow.mjs +17 -17
  24. package/dist/cli/commands/mcp.mjs +6 -6
  25. package/dist/cli/commands/mint.mjs +10 -10
  26. package/dist/cli/commands/model.mjs +222 -221
  27. package/dist/cli/commands/quickstart.mjs +7 -7
  28. package/dist/cli/commands/receipt.mjs +8 -8
  29. package/dist/cli/commands/resolve.mjs +10 -10
  30. package/dist/cli/commands/sign.mjs +11 -11
  31. package/dist/cli/commands/signer.mjs +20 -20
  32. package/dist/cli/commands/snipe.mjs +11 -11
  33. package/dist/cli/commands/strategy.mjs +5 -5
  34. package/dist/cli/commands/swap.mjs +11 -11
  35. package/dist/cli/commands/venues.mjs +2 -2
  36. package/dist/data/desk-data.mjs +26 -26
  37. package/dist/data/names.mjs +3 -3
  38. package/dist/data/providers/farming.mjs +2 -2
  39. package/dist/data/providers/lp-destination-discovery.mjs +4 -4
  40. package/dist/index.mjs +44 -44
  41. package/dist/investigator/index.mjs +2 -2
  42. package/dist/launch-radar/index.mjs +5 -5
  43. package/dist/local-signer/anvil-attestation-worker.mjs +1 -1
  44. package/dist/local-signer/index.mjs +3 -3
  45. package/dist/local-signer/runtime.mjs +16 -16
  46. package/dist/nft/universal-mint-router.mjs +4 -4
  47. package/dist/notifications/index.mjs +7 -7
  48. package/dist/router/index.mjs +3 -3
  49. package/dist/router/prepare-bridge.mjs +2 -2
  50. package/dist/router/prepare-route.mjs +3 -3
  51. package/dist/scanner/index.mjs +4 -4
  52. package/dist/strategy/index.mjs +3 -3
  53. package/dist/tui/standalone-client.mjs +90 -88
  54. package/package.json +1 -1
  55. package/public/eval-report.json +347 -13
  56. package/public/oracle-splash/docs/browser-and-web/index.html +2 -2
  57. package/public/oracle-splash/docs/connectors/index.html +2 -2
  58. package/public/oracle-splash/docs/getting-started/index.html +2 -2
  59. package/public/oracle-splash/docs/index.html +3 -3
  60. package/public/oracle-splash/docs/reference/index.html +2 -2
  61. package/public/oracle-splash/docs/security/index.html +2 -2
  62. package/public/oracle-splash/docs/using-oracle/index.html +2 -2
  63. package/server.json +2 -2
@@ -1,15 +1,15 @@
1
- import{wordlists as ft}from"ethers";var dt=new Set(["privatekey","privkey","secretkey","seedphrase","seed","mnemonic","passphrase","password","keystore","keymaterial","wif","xprv","xpriv","bearer","authorization","signature","apikey","credential"]),pt=[/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/,/\bxprv[0-9A-Za-z]{50,}\b/],ht=new Set([12,15,18,21,24]);function mt(e){let t=String(e).trim().toLowerCase().split(/\s+/).filter(Boolean);return ht.has(t.length)&&t.every(r=>ft.en.getWordIndex(r)>=0)}var yt=/^\s*(?:0x)?[0-9a-fA-F]{64}\s*$/,bt=/(hash|digest|root|salt|nonce|proof|commitment|sig|id)(?:e?s)?$/i,wt=new Set(["calldata","data","publickey","pubkey","message","payload","input","extradata"]);function gt(e){let t=je(e);return wt.has(t)||bt.test(t)}var Z=class extends Error{constructor(t){super(`action receipt refused: secret-bearing field at ${t}`),this.name="ActionReceiptSecretError",this.code="ACTION_RECEIPT_SECRET"}};function je(e){return String(e).replace(/[^a-z0-9]/gi,"").toLowerCase()}function Et(e){let t=je(e);return[...dt].some(r=>t.includes(r))}function At(e,t,r){if(typeof t=="string"){if(pt.some(o=>o.test(t))||mt(t))throw new Z(r);if(yt.test(t)&&!gt(e))throw new Z(r)}}function de(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string")return At(r,e,t),e;if(typeof e=="number"){if(!Number.isFinite(e))throw new TypeError(`action receipt: non-finite number at ${t}`);return e}if(typeof e=="bigint")return e.toString();if(Array.isArray(e))return e.map((n,s)=>de(n,`${t}[${s}]`,r));if(typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`action receipt: JSON-like value required at ${t}`);let o={};for(let n of Object.keys(e).sort()){let s=`${t}.${n}`;if(Et(n))throw new Z(s);e[n]!==void 0&&(o[n]=de(e[n],s,n))}return o}function Le(e){return de(e)}var Ir=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),Nr=Object.freeze(["read","simulate"]);var Rr=1440*60;var j=class extends Error{constructor(t,r){super(`secret material must never appear in a public API object (at ${t}, rule: ${r})`),this.name="SecretLeakError",this.path=t,this.rule=r}},St=/(private[_-]?key|secret|bearer|keystore|mnemonic|seed[_-]?phrase|passphrase|password|api[_-]?key|access[_-]?token|auth[_-]?token|session[_-]?token|signer[_-]?url|signature)/i,xt=Object.freeze(["privkey","wif","xprv","seed"]);function pe(e){let t=String(e),r=t.toLowerCase().replace(/[\s._-]+/g,"");return St.test(t)||xt.includes(r)}var He=Object.freeze([{rule:"raw-32-byte-hex-key",re:/^0x[0-9a-fA-F]{64}$/},{rule:"raw-32-byte-hex-bare",re:/^[0-9a-fA-F]{64}$/},{rule:"extended-private-key",re:/\b(?:xprv|tprv|yprv|zprv)[1-9A-HJ-NP-Za-km-z]{107}\b/},{rule:"bitcoin-wif",re:/\b[59KLc][1-9A-HJ-NP-Za-km-z]{50,51}\b/},{rule:"bip39-mnemonic",re:/\b(?:[a-z]{3,8}\s+){11,23}[a-z]{3,8}\b/},{rule:"bearer-token",re:/bearer\s+[A-Za-z0-9._~+/=-]+/i},{rule:"pem-private-key",re:/-----BEGIN[A-Z ]*PRIVATE KEY-----/},{rule:"keystore-path",re:/keystore/i},{rule:"signer-url",re:/https?:\/\/\S*sign/i},{rule:"authorization-header",re:/authorization\s*:/i}]),Ue=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"]);function Tt(e){return e.replace(/"([A-Za-z0-9_-]+)"\s*:\s*"(?:0x)?([0-9a-fA-F]{64})"/g,(t,r)=>Ue.includes(String(r).toLowerCase().replace(/[_-]/g,""))?`"${r}":"<hex64>"`:t)}function Fe(e){let t;try{t=JSON.stringify(e)}catch(n){throw new j("$",`unserializable-payload: ${String(n?.message||n)}`)}if(t===void 0)return"null";let r=Tt(t);for(let{rule:n,re:s}of He)if(s.test(r))throw new j("$<serialized>",n);if(/(?:^|[^0-9a-fA-Fx])0x[0-9a-fA-F]{64}(?![0-9a-fA-F])/.test(r))throw new j("$<serialized>","raw-32-byte-hex-embedded");return JSON.parse(t,(n,s)=>{if(n&&pe(n))throw new j(`$<serialized>.${n}`,"forbidden-key-name");return s}),t}function B(e,t="$",r=new Set,o=""){if(e==null)return e;if(typeof e=="string"){let n=Ue.includes(String(o).toLowerCase().replace(/[_-]/g,""));for(let{rule:s,re:a}of He)if(!(n&&s.startsWith("raw-32-byte-hex"))&&a.test(e))throw new j(t,s);return e}if(typeof e!="object"||r.has(e)||(r.add(e),ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e;if(e instanceof Map){for(let[n,s]of e.entries()){if(typeof n=="string"&&pe(n))throw new j(`${t}[${JSON.stringify(n)}]`,"forbidden-key-name");B(n,`${t}[key]`,r),B(s,`${t}[${String(n)}]`,r)}return e}if(e instanceof Set){let n=0;for(let s of e.values())B(s,`${t}[${n++}]`,r);return e}if(Array.isArray(e))return e.forEach((n,s)=>B(n,`${t}[${s}]`,r)),e;for(let[n,s]of Object.entries(e)){if(pe(n))throw new j(`${t}.${n}`,"forbidden-key-name");B(s,`${t}.${n}`,r,n)}return e}var Ot=/[\u0000-\u001f\u007f]/;function he(e,t){if(!e||typeof e!="object"||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`${t} must be a plain object`);return e}function me(e,t="control input"){try{B(e,t),Fe(e)}catch(r){throw new TypeError(`${t} contains secret or custody material: ${r.message}`)}return e}function Q(e,{required:t=[],optional:r=[]}={},o="object"){he(e,o);let n=new Set([...t,...r]),s=Object.keys(e).filter(a=>!n.has(a));if(s.length)throw new TypeError(`${o} has unknown field ${s[0]}`);for(let a of t)if(!Object.hasOwn(e,a))throw new TypeError(`${o}.${a} is required`);return e}function ye(e,t,r=200,{lower:o=!1}={}){if(typeof e!="string"||!e.trim()||e.length>r||Ot.test(e))throw new TypeError(`${t} must be non-empty control-free text up to ${r} characters`);let n=e.trim();return o?n.toLowerCase():n}function ee(e,t,r=80){let o=ye(e,t,r,{lower:!0});if(!/^[a-z0-9][a-z0-9._:-]*$/.test(o))throw new TypeError(`${t} must be a lowercase identifier`);return o}function se(e,t,{positive:r=!1}={}){if(!Number.isSafeInteger(e)||e<0||r&&e===0)throw new TypeError(`${t} must be a ${r?"positive":"non-negative"} safe integer`);return e}function P(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))P(t);Object.freeze(e)}return e}var It=Object.freeze(["confirmations","finalizedTag","checkpoint"]),M=Object.freeze({UNKNOWN:"UNKNOWN",INCLUDED:"INCLUDED",FINAL:"FINAL"}),Nt=Object.freeze(["LIVE","STALE","UNKNOWN","UNAVAILABLE"]);function ve({family:e,chainId:t},r="chain"){let o=ee(e,`${r}.family`,40),n;if(o==="evm"){if(typeof t=="number")n=String(se(t,`${r}.chainId`,{positive:!0}));else if(n=ye(t,`${r}.chainId`,40),!/^[1-9][0-9]*$/.test(n))throw new TypeError(`${r}.chainId must be a positive decimal EVM chain id`)}else n=ee(t,`${r}.chainId`,80);return{family:o,chainId:n}}function Rt(e,t="chain"){return Q(e,{required:["family","chainId"]},t),P(ve(e,t))}function ze(e,t="finality rule"){me(e,t),he(e,t);let r=e.rule;if(!It.includes(r))throw new TypeError(`${t}.rule must be confirmations, finalizedTag, or checkpoint`);let o=r==="confirmations"?"confirmations":r;Q(e,{required:["family","chainId","rule",o]},t);let n=ve(e,t);return r==="confirmations"?{...n,rule:r,confirmations:se(e.confirmations,`${t}.confirmations`,{positive:!0})}:{...n,rule:r,[o]:ee(e[o],`${t}.${o}`,80)}}function be(e){if(!Array.isArray(e))throw new TypeError("finality policy rules must be an array");let t=e.map((o,n)=>ze(o,`finality policy rule ${n}`)),r=new Set;for(let o of t){let n=`${o.family}\0${o.chainId}`;if(r.has(n))throw new TypeError(`duplicate finality rule for ${o.family}:${o.chainId}`);r.add(n)}return P({policyVersion:1,rules:t})}function $t(e){if(Q(e,{required:["policyVersion","rules"]},"finality policy"),e.policyVersion!==1||!Array.isArray(e.rules))throw new TypeError("unsupported finality policy");return be(e.rules)}function De(e,t){let r=Rt(t,"finality query"),n=$t(e).rules.find(s=>s.family===r.family&&s.chainId===r.chainId);return n?P({status:"KNOWN",...r,rule:n}):P({status:M.UNKNOWN,reason:"MISSING_FINALITY_RULE",...r,rule:null})}function _t(e,t){if(e==null)return null;me(e,"finality evidence");let r=t.rule==="confirmations"?"confirmations":t.rule;if(Q(e,{required:["status"],optional:[r]},"finality evidence"),!Nt.includes(e.status))throw new TypeError("finality evidence.status is unknown");let o={status:e.status};return e[r]!=null&&(o[r]=t.rule==="confirmations"?se(e.confirmations,"finality evidence.confirmations",{positive:!0}):ee(e[r],`finality evidence.${r}`,80)),o}function Be(e,t){if(!e||e.status===M.UNKNOWN||e.rule==null)return P({status:M.UNKNOWN,final:!1,reason:"MISSING_FINALITY_RULE"});let r=ze(e.rule??e,"resolved finality rule"),o=_t(t,r);if(o==null)return P({status:M.UNKNOWN,final:!1,reason:"MISSING_FINALITY_EVIDENCE"});if(o.status!=="LIVE")return P({status:M.UNKNOWN,final:!1,reason:`${o.status}_EVIDENCE`});let n=!1;return r.rule==="confirmations"?n=o.confirmations!=null&&o.confirmations>=r.confirmations:r.rule==="finalizedTag"?n=o.finalizedTag===r.finalizedTag:n=o.checkpoint===r.checkpoint,P({status:n?M.FINAL:M.INCLUDED,final:n,reason:n?"PINNED_RULE_SATISFIED":"PINNED_RULE_NOT_SATISFIED",rule:r})}var Pt=1,Wr=Object.freeze(["SUCCESS","FAIL","UNKNOWN"]),E=(...e)=>e.find(t=>t!=null),te=e=>!!e&&typeof e=="object"&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype;function Ct(e){if(e===!0||e===1||e==="1")return"SUCCESS";if(e===!1||e===0||e==="0")return"FAIL";if(typeof e!="string")return"UNKNOWN";let t=e.trim().toUpperCase();return["SUCCESS","SUCCEEDED","OK","EXECUTED"].includes(t)?"SUCCESS":["FAIL","FAILED","FAILURE","REVERTED","REJECTED"].includes(t)?"FAIL":"UNKNOWN"}function Me(e){return typeof e=="string"&&["FAIL","FAILED","FAILURE","ORPHAN","ORPHANED","REVERTED"].includes(e.trim().toUpperCase())}function ge(e){return e==null?e:Array.isArray(e)?e.map(ge):te(e)?Object.fromEntries(Object.keys(e).sort().map(t=>[t,ge(e[t])])):String(e)}function kt(e,t,r,o){let n=E(e.finalityEvidence,o?.finality,e.evidence),s=E(e.finalityPolicy,e.policy);try{return s==null&&te(e.finalityRule)&&(s=be([{family:t,chainId:r,...e.finalityRule}])),s==null||t==null||r==null?{status:"UNKNOWN",final:!1,reason:"MISSING_FINALITY_RULE"}:Be(De(s,{family:t,chainId:r}),n)}catch{return{status:"UNKNOWN",final:!1,reason:"MALFORMED_FINALITY_EVIDENCE"}}}function R(e,t,r){r!=null&&(e[t]=r)}function jt(e){return e==null?null:String(e).trim().toLowerCase()}function we(...e){let t=e.map(jt).filter(Boolean);return t.length<=1||t.every(r=>r===t[0])}function ie(e={}){if(!te(e))throw new TypeError("verified receipt: input object required");let t=Le(e),r=E(t.actionReceipt,t.receipt),o=te(r)?r:t,n=E(t.observation,t.chainObservation,t.observedReceipt),s=te(n),a=E(t.txHash,o.txHash,o.transactionHash,n?.txHash,n?.transactionHash),d=E(t.family,o.family,o.chain?.family,n?.family,n?.chain?.family),l=E(t.chainId,o.chainId,o.chain?.chainId,n?.chainId,n?.chain?.chainId),u=!we(t.txHash,o.txHash,o.transactionHash,n?.txHash,n?.transactionHash)||!we(t.family,o.family,o.chain?.family,n?.family,n?.chain?.family)||!we(t.chainId,o.chainId,o.chain?.chainId,n?.chainId,n?.chain?.chainId),i=kt(t,d,l,s&&!u?n:null),c=Ct(E(n?.receiptStatus,n?.executionStatus,n?.status)),f=E(t.reconciliationStatus,t.reconciliation?.status,n?.reconciliationStatus),p=E(t.finalityState,t.finalityEvidence?.status,t.evidence?.status,n?.finalityState),y="UNKNOWN";Me(f)||!u&&(s&&c==="FAIL"||Me(p))?y="FAIL":!u&&a&&s&&c==="SUCCESS"&&["INCLUDED","FINAL"].includes(i.status)&&(y="SUCCESS");let h={verifiedReceiptVersion:Pt,status:y};u&&(h.reason="REFERENCE_MISMATCH"),R(h,"txHash",a),R(h,"chain",E(t.chain,o.chain,n?.chain)),R(h,"family",d),R(h,"chainId",l),R(h,"block",E(n?.block,t.block)),R(h,"blockState",E(n?.blockState,n?.inclusionState)),h.finalityState=i.status,R(h,"confirmations",E(n?.confirmations,n?.finality?.confirmations,t.finalityEvidence?.confirmations,t.evidence?.confirmations)),R(h,"observedAt",E(n?.observedAt,t.observedAt)),R(h,"route",E(t.route,o.route)),R(h,"prepareHash",E(t.prepareHash,o.prepareHash)),R(h,"policyOutcome",E(t.policyOutcome,o.policyOutcome,o.policyChecks));let b=E(t.balanceChanges,n?.balanceChanges,n?.balances,o.balanceChanges,o.balances);return b!=null&&(h.balanceChanges=ge(b)),R(h,"createdAt",E(t.createdAt,o.createdAt)),R(h,"submittedAt",E(t.submittedAt,o.submittedAt)),R(h,"finalizedAt",E(t.finalizedAt,n?.finalizedAt)),R(h,"timestamps",E(t.timestamps,o.timestamps,n?.timestamps)),P(h)}import{createHash as vt}from"node:crypto";import{types as H}from"node:util";import V from"node:net";import Lt from"node:dns";var Ht=new Set(["localhost","metadata.google.internal","metadata.goog"]);function ae(e){let t=String(e).toLowerCase().split("%")[0];if((t.match(/::/g)||[]).length>1)return null;let r=i=>{if(!i)return[];let c=i.split(":"),f=c.at(-1);if(f?.includes(".")){let p=f.split(".").map(Number);if(p.length!==4||p.some(y=>!Number.isInteger(y)||y<0||y>255))return null;c.splice(c.length-1,1,(p[0]<<8|p[1]).toString(16),(p[2]<<8|p[3]).toString(16))}return c.some(p=>!/^[0-9a-f]{1,4}$/.test(p))?null:c.map(p=>Number.parseInt(p,16))},[o,n]=t.split("::"),s=r(o),a=r(n);if(!s||!a)return null;let d=t.includes("::"),l=8-s.length-a.length;if(!d&&l!==0||d&&l<1)return null;let u=[...s,...Array(Math.max(0,l)).fill(0),...a];return u.length!==8?null:Uint8Array.from(u.flatMap(i=>[i>>8,i&255]))}function Ee(e,t,r){let o=Math.floor(r/8),n=r%8;for(let a=0;a<o;a+=1)if(e[a]!==t[a])return!1;if(!n)return!0;let s=255<<8-n;return(e[o]&s)===(t[o]&s)}function Ae(e){if(V.isIPv4(e)){let t=e.split(".").map(Number);return!(t[0]===0||t[0]===10||t[0]===127||t[0]>=224||t[0]===100&&t[1]>=64&&t[1]<=127||t[0]===169&&t[1]===254||t[0]===172&&t[1]>=16&&t[1]<=31||t[0]===192&&(t[1]===0||t[1]===2||t[1]===168)||t[0]===192&&t[1]===88&&t[2]===99||t[0]===198&&(t[1]===18||t[1]===19||t[1]===51)||t[0]===203&&t[1]===0&&t[2]===113)}if(V.isIPv6(e)){let t=ae(e);if(!t)return!1;let r=ae("::ffff:0:0");return Ee(t,r,96)?Ae([...t.slice(12)].join(".")):Ee(t,ae("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([n,s])=>Ee(t,ae(n),s)):!1}return!1}function Ut(e){let t;try{t=new URL(String(e))}catch{return{ok:!1,error:`not a valid URL: ${String(e).slice(0,120)}`}}if(t.protocol!=="http:"&&t.protocol!=="https:")return{ok:!1,error:`refused protocol ${t.protocol} (only http/https)`};let r=t.hostname.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,"");if(Ht.has(r)||r.endsWith(".localhost")||r.endsWith(".internal"))return{ok:!1,error:`refused internal host ${r}`};let o=V.isIP(r);return o!==0&&!Ae(r)?{ok:!1,error:`refused private address ${r}`}:{ok:!0,url:t,host:r,isLiteralIp:o!==0}}async function Se(e,{lookupFn:t=Lt.promises.lookup}={}){let r=Ut(e);if(!r.ok)return r;if(r.isLiteralIp)return{ok:!0,url:r.url,addresses:[{address:r.host,family:V.isIPv6(r.host)?6:4}]};let o;try{o=await t(r.host,{all:!0,verbatim:!0})}catch{return{ok:!1,error:`refused: ${r.host} did not resolve`}}return!Array.isArray(o)||o.length===0||o.some(n=>!Ae(n.address))?{ok:!1,error:`refused: ${r.host} resolves to a non-public address`}:{ok:!0,url:r.url,addresses:o}}async function xe({requireUndici:e=!1,importUndici:t=()=>import("undici")}={}){let r,o;try{let c=await t();r=c.Agent,o=c.fetch}catch(c){if(e)throw new Error(`egress-guard: untrustedUrl pinning requires the undici package, which failed to load: ${c?.message||c}`);return null}if(typeof r!="function"||typeof o!="function"){if(e)throw new Error("egress-guard: untrustedUrl pinning requires undici's Agent and fetch exports, which were not found on the imported module");return null}let n=c=>String(c).toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,""),s=new Map,a=c=>(Array.isArray(c)?c:[c]).map(f=>typeof f=="string"?{address:f}:f).filter(f=>f&&f.address).map(f=>({address:f.address,family:f.family||(V.isIPv6(f.address)?6:4)})),d=(c,f,p)=>{s.set(n(c),a(typeof f=="string"?[{address:f,family:p}]:f))},l=c=>{let f=n(c);if(V.isIP(f))return[{address:f,family:V.isIPv6(f)?6:4}];let p=s.get(f);if(!p||!p.length)throw new Error(`refused: unpinned host ${c} during pinned fetch`);return p},u=new r({connect:{lookup(c,f,p){let y;try{y=l(c)}catch(h){return p(h)}return f?.all?p(null,y):p(null,y[0].address,y[0].family)}}}),i=Ft((c,f={})=>o(c,{...f,dispatcher:u}),d);return{dispatcher:u,fetch:i,pin:d,resolve:l,async close(){try{await u.destroy()}catch{}}}}var Te=Symbol.for("oracle.egressGuard.pinCapableFetch");function Ft(e,t){if(typeof e!="function")throw new Error("markPinCapableFetch: fetchImpl must be a function");if(typeof t!="function")throw new Error("markPinCapableFetch: pin must be a function");return e[Te]=Object.freeze({pin:t}),e}function Oe(e){return typeof e=="function"&&typeof e[Te]?.pin=="function"}function Ve(e,t,r){if(!Oe(e))throw new Error("pinFetchToAddresses: fetchImpl is not pin-capable");e[Te].pin(t,r)}var zt=new Set([408,425,429,500,502,503,504]),Ke=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),Dt=2,Ge=4e3,Bt=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"aborted")?.get,Mt=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"reason")?.get,Vt=AbortSignal.prototype.throwIfAborted,Kt=EventTarget.prototype.addEventListener,We=EventTarget.prototype.removeEventListener,Je=typeof AbortSignal.any=="function"?AbortSignal.any.bind(AbortSignal):null,re=e=>e?Bt.call(e):!1,Gt=e=>e?Mt.call(e):void 0,Wt=new Set([301,302,303,307,308]),le=3,tn=64*1024,L=Object.freeze({depth:32,nodes:1e4,fields:1e4,arrayLength:1e4,bytes:1024*1024});function x(e){return v(`HTTP JSON body refused: ${e}`)}function Jt(e){return["isArgumentsObject","isArrayBuffer","isAnyArrayBuffer","isArrayBufferView","isBoxedPrimitive","isDataView","isDate","isExternal","isGeneratorObject","isKeyObject","isCryptoKey","isMap","isMapIterator","isModuleNamespaceObject","isNativeError","isPromise","isRegExp","isSet","isSetIterator","isTypedArray","isWeakMap","isWeakSet"].some(t=>typeof H[t]=="function"&&H[t](e))}function qt(e){let t=[],r=0,o=0,n=0,s=0,a=new WeakSet,d=i=>{if(r+=Buffer.byteLength(i,"utf8"),r>L.bytes)throw x("serialized byte limit exceeded");t.push(i)},l=i=>{if(Buffer.byteLength(i,"utf8")>L.bytes)throw x("serialized byte limit exceeded");return JSON.stringify(i)},u=(i,c)=>{if(o+=1,o>L.nodes)throw x("node limit exceeded");if(c>L.depth)throw x("depth limit exceeded");if(i===null){d("null");return}if(typeof i=="string"){d(l(i));return}if(typeof i=="boolean"){d(i?"true":"false");return}if(typeof i=="number"){if(!Number.isFinite(i))throw x("non-finite number");d(Object.is(i,-0)?"0":String(i));return}if(typeof i!="object")throw x("unsupported non-JSON value");if(H.isProxy(i))throw x("proxy value");if(Jt(i))throw x("unsupported exotic object");if(a.has(i))throw x("cyclic value");a.add(i);try{if(Object.getOwnPropertySymbols(i).length>0)throw x("symbol-keyed fields are unsupported");if(Array.isArray(i)){let y=Object.getPrototypeOf(i),h=0;for(;y!==null;){if(H.isProxy(y))throw x("proxy array prototype");if(h+=1,h>L.depth)throw x("array prototype depth limit exceeded");y=Object.getPrototypeOf(y)}if(i.length>L.arrayLength)throw x("array length limit exceeded");for(let A=0;A<i.length;A+=1){let U=Object.getOwnPropertyDescriptor(i,String(A));if(!U||!Object.hasOwn(U,"value")||U.enumerable!==!0)throw x("array entries must be dense enumerable own data")}let b=0;for(let A in i){if(s+=1,s>L.fields)throw x("enumeration limit exceeded");if(Object.hasOwn(i,A)&&(b+=1,b>i.length))throw x("named array fields are unsupported")}if(b!==i.length)throw x("array entries must be dense enumerable own data");d("[");for(let A=0;A<i.length;A+=1)A&&d(","),u(Object.getOwnPropertyDescriptor(i,String(A)).value,c+1);d("]");return}let f=Object.getPrototypeOf(i);if(f!==Object.prototype&&f!==null)throw x("non-plain object");let p=[];for(let y in i){if(s+=1,s>L.fields)throw x("enumeration limit exceeded");if(!Object.hasOwn(i,y))continue;if(n+=1,n>L.fields)throw x("field limit exceeded");let h=Object.getOwnPropertyDescriptor(i,y);if(!h||!Object.hasOwn(h,"value")||h.enumerable!==!0)throw x("object fields must be enumerable own data");p.push([y,h.value])}d("{");for(let y=0;y<p.length;y+=1)y&&d(","),d(l(p[y][0])),d(":"),u(p[y][1],c+1);d("}")}finally{a.delete(i)}};return u(e,0),t.join("")}function Yt(e){let t=Object.create(null);if(e==null)return t;if(typeof e!="object"&&typeof e!="function")throw new TypeError("HTTP headers must be an object");if(H.isProxy(e))throw new TypeError("HTTP headers must not be a proxy");if(Object.getOwnPropertySymbols(e).length>0)throw new TypeError("HTTP headers must not contain symbol fields");let r=new Set;for(let o of Object.keys(e)){if(!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/u.test(o))throw new TypeError("HTTP header names must be valid tokens");let n=o.toLowerCase();if(r.has(n))throw new TypeError("HTTP headers contain a duplicate canonical name");r.add(n);let s=Object.getOwnPropertyDescriptor(e,o);if(!s||!Object.hasOwn(s,"value"))throw new TypeError("HTTP headers must contain own data properties");let a=s.value;if(a==null||["object","function","symbol"].includes(typeof a))throw new TypeError("HTTP header values must be scalar");t[o]=String(a)}return t}function Xt(){return Object.assign(Object.create(null),{Accept:"application/json"})}function Zt(e,t){if(!e)throw new Error(`HTTP redirect from ${t} missing Location`);let r=new URL(String(e),String(t));if(r.protocol!=="http:"&&r.protocol!=="https:")throw new Error(`HTTP redirect from ${t} used unsupported protocol ${r.protocol}`);return r.toString()}function Qt(e,t){return new URL(String(e)).origin===new URL(String(t)).origin}var Ie=new Map,qe=new WeakMap,Ye=1;function ce(e){if((typeof e!="object"||e===null)&&typeof e!="function")return`${typeof e}:${String(e)}`;let t=qe.get(e);return t||(t=Ye,Ye+=1,qe.set(e,t)),`reference:${t}`}var er=new Set(["eth_blockNumber","eth_call","eth_chainId","eth_estimateGas","getHealth","minimumLedgerSlot","net_version","simulateTransaction","web3_clientVersion"]),tr=new Set(["allMids","l2Book","outcomeMeta","spotClearinghouseState","userFills","meta","metaAndAssetCtxs","perpDexs","candleSnapshot","fundingHistory","openOrders","frontendOpenOrders","clearinghouseState","spotMeta","validatorSummaries","delegatorSummary","delegations","delegatorRewards","delegatorHistory","maxBuilderFee"]);function Xe(e){if(!e||typeof e!="object"||Array.isArray(e)||!Object.hasOwn(e,"jsonrpc")||!Object.hasOwn(e,"method")||e.jsonrpc!=="2.0")return!1;let t=typeof e.method=="string"?e.method:"";return t?er.has(t)||/^get[A-Z0-9_]/u.test(t)||/^is[A-Z0-9_]/u.test(t)||/^eth_get[A-Z0-9_]/u.test(t):!1}function Ze(e,t){if(e==="GET"&&t==null)return!0;if(e!=="POST"||t==null)return!1;let r=t;if(typeof t=="string")try{r=JSON.parse(t)}catch{return!1}if(Array.isArray(r))return r.length>0&&r.every(Xe);if(!r||typeof r!="object")return!1;if(Object.hasOwn(r,"jsonrpc")||Object.hasOwn(r,"method"))return Xe(r);let o=Object.hasOwn(r,"type")?r.type:null;return typeof o=="string"&&tr.has(o)&&(!Object.hasOwn(r,"action")||r.action==null)&&(!Object.hasOwn(r,"signature")||r.signature==null)&&(!Object.hasOwn(r,"nonce")||r.nonce==null)}function rr(e,t,r,o={},n=null){let s=vt("sha256"),a=(l,u)=>{let i=String(u);s.update(String(Buffer.byteLength(l,"utf8"))).update(":").update(l),s.update("=").update(String(Buffer.byteLength(i,"utf8"))).update(":").update(i).update(`
2
- `)};a("method",e),a("url",t),Object.keys(r||{}).map((l,u)=>({name:l.toLowerCase(),order:u,value:String(r[l])})).sort((l,u)=>l.name.localeCompare(u.name)||l.order-u.order).forEach((l,u)=>{a(`header-name-${u}`,l.name),a(`header-value-${u}`,l.value)}),a("body",n??"-");for(let l of["untrustedUrl","maxResponseBytes","sameOriginRedirectsOnly","redirectPolicy","maxRedirects","timeoutMs","retries","fetchImpl","realFetch","lookupFn","importUndici","validateResponse"])a(`context-${l}`,o[l]??"-");return s.digest("hex")}function nr(e,t){let r=Number(t);return Number.isFinite(r)&&r>0?Math.min(r*1e3,Ge):Math.min(250*2**e,Ge)+Math.floor(Math.random()*100)}var or=e=>new Promise(t=>setTimeout(t,e));function v(e,t={}){let r=new Error(e);return r.retryable=!1,Object.assign(r,t),r}function Ne(e,t,r){return v(`HTTP response from ${e} exceeded maxResponseBytes ${r} (${t})`,{oversize:!0})}function K(e){try{let t=e?.body?.cancel?.();t&&typeof t.then=="function"&&t.catch(()=>{})}catch{}}function sr(e){return e?e.byteLength??e.length??0:0}async function ir(e,t,{url:r,truncate:o=!1,onOversize:n}={}){if(t==null)return await e.text();let s=Number(e.headers?.get?.("content-length"));if(Number.isFinite(s)&&s>t&&(K(e),!o))throw Ne(r,`content-length ${s}`,t);let a=e.body?.getReader?.();if(!a){let c=await e.text(),f=Buffer.byteLength(c,"utf8");if(f>t){if(!o)throw Ne(r,`body ${f} bytes`,t);return Buffer.from(c,"utf8").subarray(0,t).toString("utf8")}return c}let d=[],l=0,u=!1;try{for(;;){let{value:c,done:f}=await a.read();if(f)break;if(c&&(d.push(Buffer.from(c)),l+=sr(c),l>t)){u=!0;break}}}finally{if(u)try{await a.cancel()}catch{}try{a.releaseLock?.()}catch{}}if(u&&(typeof n=="function"&&n(),!o))throw Ne(r,`streamed ${l} bytes`,t);let i=Buffer.concat(d);return(u?i.subarray(0,t):i).toString("utf8")}function ar(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}async function cr(e,{fetchImpl:t,method:r,headers:o,body:n,timeoutMs:s,lookupFn:a,realFetch:d,untrustedUrl:l=!1,maxResponseBytes:u=null,sameOriginRedirectsOnly:i=!1,importUndici:c,validateResponse:f,signal:p,redirectPolicy:y="follow",maxRedirects:h=le}){let b=null,A=t,U=a?{lookupFn:a}:{};if(l&&!d&&!Oe(A))throw v(`HTTP refused ${e}: untrustedUrl requires a pin-capable fetchImpl (see markPinCapableFetch in egress-guard.mjs) or no fetchImpl override so Oracle can pin the connection itself`);let $=new AbortController,k=setTimeout(()=>$.abort(),s),W=p?Je?Je([p,$.signal]):p:$.signal,J=async(w,{status:O=null}={})=>{let I=await Se(w,U);if(!I.ok)throw v(O==null?`HTTP refused ${w}: ${I.error}`:`HTTP redirect to ${w} ${I.error}`,O==null?{}:{status:O});let F=new URL(w).hostname;if(d){if(b&&(await b.close(),b=null),!b)try{b=await xe({requireUndici:!0,...c?{importUndici:c}:{}})}catch(m){throw v(O==null?`HTTP refused ${w}: ${m?.message||m}`:`HTTP redirect to ${w} refused: ${m?.message||m}`,O==null?{}:{status:O})}b.pin(F,I.addresses),A=b.fetch}else Ve(A,F,I.addresses);return I};try{let w=String(e),O=Object.assign(Object.create(null),o||{});l&&await J(w);for(let I=0;I<=h;I+=1){let F=Object.assign(Object.create(null),{method:r,headers:O,body:n,signal:W,redirect:"manual",dispatcher:void 0}),m=await A(w,F);if((y==="error"||h===0)&&m.status>=300&&m.status<400)throw K(m),v(`HTTP ${m.status} ${r} redirect refused`,{status:m.status,redirectRefused:!0});if(Wt.has(m.status)){let _=i===!0&&r==="POST"&&[307,308].includes(m.status)&&Ze(r,n);if(r!=="GET"&&r!=="HEAD"&&!_){K(m);let T=new Error(`HTTP ${m.status} ${r} ${w} redirected non-idempotent request`);throw T.status=m.status,T}if(I===h)throw K(m),v(`HTTP ${m.status} ${r} redirect budget exhausted`,{status:m.status,redirectRefused:!0});let Pe=m.headers?.get?.("location"),C;try{C=Zt(Pe,w)}catch(T){throw K(m),T}let z=!Qt(C,w);if(K(m),z&&r==="POST"){let T=new Error(`HTTP ${m.status} ${r} cross-origin redirect refused`);throw T.status=m.status,T}if(z&&i){let T=new Error(`HTTP ${m.status} ${r} cross-origin redirect refused`);throw T.status=m.status,T.retryable=!1,T}if(z&&(O=Xt(O)),l)await J(C,{status:m.status});else if(z){let T=await Se(C,U);if(!T.ok){let S=new Error(`HTTP redirect from ${w} ${T.error}`);throw S.status=m.status,S.retryable=!1,S}d&&T.addresses?.length&&(b||(b=await xe(c?{importUndici:c}:{})),b&&(b.pin(new URL(C).hostname,T.addresses),A=b.fetch))}w=C;continue}if(typeof f=="function")try{await f(m,{url:w})}catch(_){throw K(m),v(_?.message||String(_))}let N=await ir(m,u,{url:w,onOversize:()=>$.abort()}),q=ar(N);if(!m.ok){let _=new Error(`HTTP ${m.status} ${r} ${w}`);throw _.status=m.status,_.retryAfter=m.headers?.get?.("retry-after")??null,_.body=q??N.slice(0,300),_}return q??N}throw new Error(`HTTP redirect loop for ${e}`)}catch(w){if($.signal.aborted&&!re(p)){let O=w&&(typeof w=="object"||typeof w=="function")&&!H.isProxy(w)?w:null,I=O?Object.getOwnPropertyDescriptor(O,"oversize"):null;if(!(I&&Object.hasOwn(I,"value")&&I.value===!0))try{if(!O)throw new TypeError("unsafe rejection");Object.defineProperties(O,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}})}catch{let m=new Error("HTTP request timed out");throw Object.defineProperties(m,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}}),m}}throw w}finally{clearTimeout(k),b&&await b.close()}}async function Qe(e,t={}){if(t!=null&&typeof t!="object"&&typeof t!="function")throw new TypeError("HTTP options must be an object");if(t!=null&&H.isProxy(t))throw new TypeError("HTTP options must not be a proxy");let r=new Set(["body","dedupe","fetchImpl","headers","importUndici","lookupFn","maxRedirects","maxResponseBytes","method","redirectPolicy","retries","sameOriginRedirectsOnly","signal","timeoutMs","untrustedUrl","validateResponse"]);if(t!=null){if(Object.getOwnPropertySymbols(t).length>0)throw new TypeError("HTTP options contain unknown fields");for(let S of Object.getOwnPropertyNames(t)){let g=Object.getOwnPropertyDescriptor(t,S);if(!(S==="toJSON"&&g&&Object.hasOwn(g,"value")&&g.value===void 0)){if(!r.has(S))throw new TypeError("HTTP options contain unknown fields");if(!g||!g.enumerable||!Object.hasOwn(g,"value"))throw new TypeError("HTTP options must contain enumerable own data properties")}}}let o=S=>{if(t==null||!Object.hasOwn(t,S))return;let g=Object.getOwnPropertyDescriptor(t,S);if(!g||!Object.hasOwn(g,"value"))throw new TypeError("HTTP options must contain own data properties");return g.value};if(typeof e!="string"||e.length===0||e.length>8192)throw new TypeError("HTTP URL must be a bounded string");let n=o("method");if(n!==void 0&&(typeof n!="string"||!/^[A-Za-z]+$/u.test(n)))throw new TypeError("HTTP method must be a string token");let s=o("timeoutMs");if(s!==void 0&&(!Number.isInteger(s)||s<1||s>12e4))throw new TypeError("HTTP timeoutMs must be a bounded integer");let a=o("retries");if(a!==void 0&&(!Number.isInteger(a)||a<0||a>10))throw new TypeError("HTTP retries must be a bounded integer");let d=o("redirectPolicy");if(d!==void 0&&d!=="follow"&&d!=="error")throw new TypeError('HTTP redirectPolicy must be "follow" or "error"');let l=o("maxRedirects");if(l!==void 0&&(!Number.isInteger(l)||l<0||l>le))throw new TypeError(`HTTP maxRedirects must be an integer from 0 through ${le}`);if(d==="error"&&l!==void 0&&l!==0)throw new TypeError('HTTP redirectPolicy "error" requires maxRedirects 0 when supplied');let u=d??"follow",i=u==="error"?0:l??le;for(let S of["dedupe","untrustedUrl","sameOriginRedirectsOnly"]){let g=o(S);if(g!==void 0&&typeof g!="boolean")throw new TypeError(`HTTP ${S} must be boolean`)}let c=o("maxResponseBytes");if(c!==void 0&&(!Number.isInteger(c)||c<1||c>64*1024*1024))throw new TypeError("HTTP maxResponseBytes must be a bounded integer");let f=o("signal");if(f!==void 0){if(H.isProxy(f)||!(f instanceof AbortSignal))throw new TypeError("HTTP signal must be a native AbortSignal");try{re(f)}catch{throw new TypeError("HTTP signal must be a native AbortSignal")}}for(let S of["importUndici","lookupFn","validateResponse"]){let g=o(S);if(g!==void 0&&typeof g!="function")throw new TypeError(`HTTP ${S} must be a function`)}let p=o("fetchImpl"),y=p||globalThis.fetch;if(typeof y!="function")throw new Error("fetch unavailable \u2014 pass opts.fetchImpl");let h=s??12e3,b=(n||"GET").toUpperCase(),A=o("headers"),U=Yt(A),$=Object.assign(Object.create(null),U);Object.keys($).some(S=>S.toLowerCase()==="accept")||($.Accept="application/json");let k=o("body");k!=null&&typeof k!="string"&&(Object.keys($).find(g=>g.toLowerCase()==="content-type")||($["Content-Type"]="application/json"),k=qt(k));let W=a??Dt,J=o("lookupFn"),w=!p,O=o("untrustedUrl")===!0,I=o("sameOriginRedirectsOnly")===!0,F=o("importUndici"),m=o("validateResponse"),N=f,q=c??null,_=async()=>{let S;for(let g=0;g<=W;g++){N&&Vt.call(N);try{return await cr(e,{fetchImpl:y,method:b,headers:$,body:k,timeoutMs:h,lookupFn:J,realFetch:w,untrustedUrl:O,maxResponseBytes:q,sameOriginRedirectsOnly:I,importUndici:F,validateResponse:m,signal:N,redirectPolicy:u,maxRedirects:i})}catch(D){S=D;let G=fe=>{if(!D||typeof D!="object"&&typeof D!="function"||H.isProxy(D))return;let Y=Object.getOwnPropertyDescriptor(D,fe);return Y&&Object.hasOwn(Y,"value")?Y.value:void 0},ue=G("status"),ct=G("oracleTimeout")===!0||G("name")==="AbortError"||G("name")==="TimeoutError"||re(N),lt=new Set([408,425,429]),ut=G("retryable")===!1?!1:ue!=null?lt.has(ue)||zt.has(ue)&&Ke.has(b):!ct&&Ke.has(b);if(g===W||!ut)throw D;let Ce=nr(g,G("retryAfter"));N?await new Promise((fe,Y)=>{let ke,X=()=>{clearTimeout(ke),We.call(N,"abort",X),Y(Gt(N)||new DOMException("Aborted","AbortError"))};if(re(N)){X();return}ke=setTimeout(()=>{We.call(N,"abort",X),fe()},Ce),Kt.call(N,"abort",X,{once:!0}),re(N)&&X()}):await or(Ce)}}throw S};if(!(o("dedupe")!==!1&&!N&&Ze(b,k)))return _();let C=rr(b,e,$,{untrustedUrl:O,maxResponseBytes:q,sameOriginRedirectsOnly:I,redirectPolicy:u,maxRedirects:i,timeoutMs:h,retries:W,fetchImpl:ce(y),realFetch:w,lookupFn:ce(J),importUndici:ce(F),validateResponse:ce(m)},k),z=Ie.get(C);if(z)return z;let T=_().finally(()=>Ie.delete(C));return Ie.set(C,T),T}var et={robinhood:{chainId:4663,name:"Robinhood Chain",rpcEnv:["RH_CHAIN_RPC"],evm:!0},ethereum:{chainId:1,name:"Ethereum",rpcEnv:["ETH_RPC_URL","ETHEREUM_RPC_URL","MAINNET_RPC_URL"],evm:!0},polygon:{chainId:137,name:"Polygon",rpcEnv:["POLYGON_RPC_URL","POLYGON_RPC"],evm:!0},arbitrum:{chainId:42161,name:"Arbitrum One",rpcEnv:["ARBITRUM_RPC_URL","ARB_RPC_URL"],evm:!0},base:{chainId:8453,name:"Base",rpcEnv:["BASE_RPC_URL"],evm:!0},hyperevm:{chainId:999,name:"HyperEVM",rpcEnv:["HYPEREVM_RPC_URL","HYPER_EVM_RPC"],evm:!0},bsc:{chainId:56,name:"BNB Smart Chain",rpcEnv:["BSC_RPC_URL","BNB_RPC_URL"],evm:!0},avalanche:{chainId:43114,name:"Avalanche C-Chain",rpcEnv:["AVALANCHE_RPC_URL","AVAX_RPC_URL"],evm:!0},optimism:{chainId:10,name:"OP Mainnet",rpcEnv:["OPTIMISM_RPC_URL","OP_RPC_URL"],evm:!0},abstract:{chainId:2741,name:"Abstract",rpcEnv:["ABSTRACT_RPC_URL","ABS_RPC_URL"],evm:!0},stable:{chainId:988,name:"Stable Mainnet",rpcEnv:["STABLE_RPC_URL","STABLE_RPC"],evm:!0}},lr=new Map(Object.values(et).map(e=>[e.chainId,e]));function tt(e){return lr.get(Number(e))||null}function rt(e,t=process.env){let r=tt(e);if(!r)return null;for(let o of r.rpcEnv){let n=(t[o]||"").trim();if(n)return n}return null}import{Interface as ur,getAddress as fr}from"ethers";var ln=new ur(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);function Re(e,t){try{return fr(e).toLowerCase()}catch{throw new Error(`${t} must be a valid EVM address`)}}function dr(e){let t=String(e||"").trim();if(!/^0x[0-9a-fA-F]{64}$/.test(t))throw new Error("txHash must be a 32-byte hex transaction hash");return t.toLowerCase()}function $e(e){return e==null?null:Number.parseInt(String(e),16)}var pr={1:"https://ethereum.publicnode.com",137:"https://polygon-bor-rpc.publicnode.com",42161:"https://arbitrum-one-rpc.publicnode.com",8453:"https://base-rpc.publicnode.com",10:"https://optimism-rpc.publicnode.com",988:"https://rpc.stable.xyz",56:"https://bsc-rpc.publicnode.com",43114:"https://avalanche-c-chain-rpc.publicnode.com",999:"https://rpc.hyperliquid.xyz/evm",2741:"https://api.mainnet.abs.xyz",4663:"https://rpc.mainnet.chain.robinhood.com"};function hr(e,{rpcUrl:t,env:r=process.env}={}){if(t)return t;let o=rt(e,r);return o||pr[Number(e)]||null}var mr=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/;function yr(e){let t=String(e||""),r=t.toLowerCase();if(t!==t.trim()||!/^[a-zA-Z0-9_]+$/.test(t)||!mr.test(r))throw new Error(`evm-rpc: ${t} refused \u2014 @oracle-agent/oracle is prepare-only (read RPC only; no broadcast/sign)`);return r}var ne=new Map,nt=new Map;function br(e){let t=new Error(e?.message||JSON.stringify(e));return t.code=e?.code,t}function wr(e){if(e?.error)throw br(e.error);return e?.result}function gr(e,t,r){return`${e}
1
+ import{wordlists as mt}from"ethers";var yt=new Set(["privatekey","privkey","secretkey","seedphrase","seed","mnemonic","passphrase","password","keystore","keymaterial","wif","xprv","xpriv","bearer","authorization","signature","apikey","credential"]),bt=[/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/,/\bxprv[0-9A-Za-z]{50,}\b/],wt=new Set([12,15,18,21,24]);function gt(e){let t=String(e).trim().toLowerCase().split(/\s+/).filter(Boolean);return wt.has(t.length)&&t.every(r=>mt.en.getWordIndex(r)>=0)}var Et=/^\s*(?:0x)?[0-9a-fA-F]{64}\s*$/,At=/(hash|digest|root|salt|nonce|proof|commitment|sig|id)(?:e?s)?$/i,St=new Set(["calldata","data","publickey","pubkey","message","payload","input","extradata"]);function xt(e){let t=Me(e);return St.has(t)||At.test(t)}var Z=class extends Error{constructor(t){super(`action receipt refused: secret-bearing field at ${t}`),this.name="ActionReceiptSecretError",this.code="ACTION_RECEIPT_SECRET"}};function Me(e){return String(e).replace(/[^a-z0-9]/gi,"").toLowerCase()}function Tt(e){let t=Me(e);return[...yt].some(r=>t.includes(r))}function Ot(e,t,r){if(typeof t=="string"){if(bt.some(o=>o.test(t))||gt(t))throw new Z(r);if(Et.test(t)&&!xt(e))throw new Z(r)}}function pe(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string")return Ot(r,e,t),e;if(typeof e=="number"){if(!Number.isFinite(e))throw new TypeError(`action receipt: non-finite number at ${t}`);return e}if(typeof e=="bigint")return e.toString();if(Array.isArray(e))return e.map((n,s)=>pe(n,`${t}[${s}]`,r));if(typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`action receipt: JSON-like value required at ${t}`);let o={};for(let n of Object.keys(e).sort()){let s=`${t}.${n}`;if(Tt(n))throw new Z(s);e[n]!==void 0&&(o[n]=pe(e[n],s,n))}return o}function Ue(e){return pe(e)}var jr=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),Lr=Object.freeze(["read","simulate"]);var Hr=1440*60;var L=class extends Error{constructor(t,r){super(`secret material must never appear in a public API object (at ${t}, rule: ${r})`),this.name="SecretLeakError",this.path=t,this.rule=r}},It=/(private[_-]?key|secret|bearer|keystore|mnemonic|seed[_-]?phrase|passphrase|password|api[_-]?key|access[_-]?token|auth[_-]?token|session[_-]?token|signer[_-]?url|signature)/i,Nt=Object.freeze(["privkey","wif","xprv","seed"]);function he(e){let t=String(e),r=t.toLowerCase().replace(/[\s._-]+/g,"");return It.test(t)||Nt.includes(r)}var ve=Object.freeze([{rule:"raw-32-byte-hex-key",re:/^0x[0-9a-fA-F]{64}$/},{rule:"raw-32-byte-hex-bare",re:/^[0-9a-fA-F]{64}$/},{rule:"extended-private-key",re:/\b(?:xprv|tprv|yprv|zprv)[1-9A-HJ-NP-Za-km-z]{107}\b/},{rule:"bitcoin-wif",re:/\b[59KLc][1-9A-HJ-NP-Za-km-z]{50,51}\b/},{rule:"bip39-mnemonic",re:/\b(?:[a-z]{3,8}\s+){11,23}[a-z]{3,8}\b/},{rule:"bearer-token",re:/bearer\s+[A-Za-z0-9._~+/=-]+/i},{rule:"pem-private-key",re:/-----BEGIN[A-Z ]*PRIVATE KEY-----/},{rule:"keystore-path",re:/keystore/i},{rule:"signer-url",re:/https?:\/\/\S*sign/i},{rule:"authorization-header",re:/authorization\s*:/i}]),Fe=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"]);function Rt(e){return e.replace(/"([A-Za-z0-9_-]+)"\s*:\s*"(?:0x)?([0-9a-fA-F]{64})"/g,(t,r)=>Fe.includes(String(r).toLowerCase().replace(/[_-]/g,""))?`"${r}":"<hex64>"`:t)}function De(e){let t;try{t=JSON.stringify(e)}catch(n){throw new L("$",`unserializable-payload: ${String(n?.message||n)}`)}if(t===void 0)return"null";let r=Rt(t);for(let{rule:n,re:s}of ve)if(s.test(r))throw new L("$<serialized>",n);if(/(?:^|[^0-9a-fA-Fx])0x[0-9a-fA-F]{64}(?![0-9a-fA-F])/.test(r))throw new L("$<serialized>","raw-32-byte-hex-embedded");return JSON.parse(t,(n,s)=>{if(n&&he(n))throw new L(`$<serialized>.${n}`,"forbidden-key-name");return s}),t}function z(e,t="$",r=new Set,o=""){if(e==null)return e;if(typeof e=="string"){let n=Fe.includes(String(o).toLowerCase().replace(/[_-]/g,""));for(let{rule:s,re:a}of ve)if(!(n&&s.startsWith("raw-32-byte-hex"))&&a.test(e))throw new L(t,s);return e}if(typeof e!="object"||r.has(e)||(r.add(e),ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e;if(e instanceof Map){for(let[n,s]of e.entries()){if(typeof n=="string"&&he(n))throw new L(`${t}[${JSON.stringify(n)}]`,"forbidden-key-name");z(n,`${t}[key]`,r),z(s,`${t}[${String(n)}]`,r)}return e}if(e instanceof Set){let n=0;for(let s of e.values())z(s,`${t}[${n++}]`,r);return e}if(Array.isArray(e))return e.forEach((n,s)=>z(n,`${t}[${s}]`,r)),e;for(let[n,s]of Object.entries(e)){if(he(n))throw new L(`${t}.${n}`,"forbidden-key-name");z(s,`${t}.${n}`,r,n)}return e}var $t=/[\u0000-\u001f\u007f]/;function me(e,t){if(!e||typeof e!="object"||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`${t} must be a plain object`);return e}function ye(e,t="control input"){try{z(e,t),De(e)}catch(r){throw new TypeError(`${t} contains secret or custody material: ${r.message}`)}return e}function Q(e,{required:t=[],optional:r=[]}={},o="object"){me(e,o);let n=new Set([...t,...r]),s=Object.keys(e).filter(a=>!n.has(a));if(s.length)throw new TypeError(`${o} has unknown field ${s[0]}`);for(let a of t)if(!Object.hasOwn(e,a))throw new TypeError(`${o}.${a} is required`);return e}function be(e,t,r=200,{lower:o=!1}={}){if(typeof e!="string"||!e.trim()||e.length>r||$t.test(e))throw new TypeError(`${t} must be non-empty control-free text up to ${r} characters`);let n=e.trim();return o?n.toLowerCase():n}function ee(e,t,r=80){let o=be(e,t,r,{lower:!0});if(!/^[a-z0-9][a-z0-9._:-]*$/.test(o))throw new TypeError(`${t} must be a lowercase identifier`);return o}function ie(e,t,{positive:r=!1}={}){if(!Number.isSafeInteger(e)||e<0||r&&e===0)throw new TypeError(`${t} must be a ${r?"positive":"non-negative"} safe integer`);return e}function P(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))P(t);Object.freeze(e)}return e}var _t=Object.freeze(["confirmations","finalizedTag","checkpoint"]),B=Object.freeze({UNKNOWN:"UNKNOWN",INCLUDED:"INCLUDED",FINAL:"FINAL"}),Pt=Object.freeze(["LIVE","STALE","UNKNOWN","UNAVAILABLE"]);function ze({family:e,chainId:t},r="chain"){let o=ee(e,`${r}.family`,40),n;if(o==="evm"){if(typeof t=="number")n=String(ie(t,`${r}.chainId`,{positive:!0}));else if(n=be(t,`${r}.chainId`,40),!/^[1-9][0-9]*$/.test(n))throw new TypeError(`${r}.chainId must be a positive decimal EVM chain id`)}else n=ee(t,`${r}.chainId`,80);return{family:o,chainId:n}}function Ct(e,t="chain"){return Q(e,{required:["family","chainId"]},t),P(ze(e,t))}function Be(e,t="finality rule"){ye(e,t),me(e,t);let r=e.rule;if(!_t.includes(r))throw new TypeError(`${t}.rule must be confirmations, finalizedTag, or checkpoint`);let o=r==="confirmations"?"confirmations":r;Q(e,{required:["family","chainId","rule",o]},t);let n=ze(e,t);return r==="confirmations"?{...n,rule:r,confirmations:ie(e.confirmations,`${t}.confirmations`,{positive:!0})}:{...n,rule:r,[o]:ee(e[o],`${t}.${o}`,80)}}function we(e){if(!Array.isArray(e))throw new TypeError("finality policy rules must be an array");let t=e.map((o,n)=>Be(o,`finality policy rule ${n}`)),r=new Set;for(let o of t){let n=`${o.family}\0${o.chainId}`;if(r.has(n))throw new TypeError(`duplicate finality rule for ${o.family}:${o.chainId}`);r.add(n)}return P({policyVersion:1,rules:t})}function kt(e){if(Q(e,{required:["policyVersion","rules"]},"finality policy"),e.policyVersion!==1||!Array.isArray(e.rules))throw new TypeError("unsupported finality policy");return we(e.rules)}function Ve(e,t){let r=Ct(t,"finality query"),n=kt(e).rules.find(s=>s.family===r.family&&s.chainId===r.chainId);return n?P({status:"KNOWN",...r,rule:n}):P({status:B.UNKNOWN,reason:"MISSING_FINALITY_RULE",...r,rule:null})}function jt(e,t){if(e==null)return null;ye(e,"finality evidence");let r=t.rule==="confirmations"?"confirmations":t.rule;if(Q(e,{required:["status"],optional:[r]},"finality evidence"),!Pt.includes(e.status))throw new TypeError("finality evidence.status is unknown");let o={status:e.status};return e[r]!=null&&(o[r]=t.rule==="confirmations"?ie(e.confirmations,"finality evidence.confirmations",{positive:!0}):ee(e[r],`finality evidence.${r}`,80)),o}function Ge(e,t){if(!e||e.status===B.UNKNOWN||e.rule==null)return P({status:B.UNKNOWN,final:!1,reason:"MISSING_FINALITY_RULE"});let r=Be(e.rule??e,"resolved finality rule"),o=jt(t,r);if(o==null)return P({status:B.UNKNOWN,final:!1,reason:"MISSING_FINALITY_EVIDENCE"});if(o.status!=="LIVE")return P({status:B.UNKNOWN,final:!1,reason:`${o.status}_EVIDENCE`});let n=!1;return r.rule==="confirmations"?n=o.confirmations!=null&&o.confirmations>=r.confirmations:r.rule==="finalizedTag"?n=o.finalizedTag===r.finalizedTag:n=o.checkpoint===r.checkpoint,P({status:n?B.FINAL:B.INCLUDED,final:n,reason:n?"PINNED_RULE_SATISFIED":"PINNED_RULE_NOT_SATISFIED",rule:r})}var Lt=1,tn=Object.freeze(["SUCCESS","FAIL","UNKNOWN"]),A=(...e)=>e.find(t=>t!=null),te=e=>!!e&&typeof e=="object"&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype;function Ht(e){if(e===!0||e===1||e==="1")return"SUCCESS";if(e===!1||e===0||e==="0")return"FAIL";if(typeof e!="string")return"UNKNOWN";let t=e.trim().toUpperCase();return["SUCCESS","SUCCEEDED","OK","EXECUTED"].includes(t)?"SUCCESS":["FAIL","FAILED","FAILURE","REVERTED","REJECTED"].includes(t)?"FAIL":"UNKNOWN"}function Ke(e){return typeof e=="string"&&["FAIL","FAILED","FAILURE","ORPHAN","ORPHANED","REVERTED"].includes(e.trim().toUpperCase())}function Ee(e){return e==null?e:Array.isArray(e)?e.map(Ee):te(e)?Object.fromEntries(Object.keys(e).sort().map(t=>[t,Ee(e[t])])):String(e)}function Mt(e,t,r,o){let n=A(e.finalityEvidence,o?.finality,e.evidence),s=A(e.finalityPolicy,e.policy);try{return s==null&&te(e.finalityRule)&&(s=we([{family:t,chainId:r,...e.finalityRule}])),s==null||t==null||r==null?{status:"UNKNOWN",final:!1,reason:"MISSING_FINALITY_RULE"}:Ge(Ve(s,{family:t,chainId:r}),n)}catch{return{status:"UNKNOWN",final:!1,reason:"MALFORMED_FINALITY_EVIDENCE"}}}function R(e,t,r){r!=null&&(e[t]=r)}function Ut(e){return e==null?null:String(e).trim().toLowerCase()}function ge(...e){let t=e.map(Ut).filter(Boolean);return t.length<=1||t.every(r=>r===t[0])}function ae(e={}){if(!te(e))throw new TypeError("verified receipt: input object required");let t=Ue(e),r=A(t.actionReceipt,t.receipt),o=te(r)?r:t,n=A(t.observation,t.chainObservation,t.observedReceipt),s=te(n),a=A(t.txHash,o.txHash,o.transactionHash,n?.txHash,n?.transactionHash),d=A(t.family,o.family,o.chain?.family,n?.family,n?.chain?.family),l=A(t.chainId,o.chainId,o.chain?.chainId,n?.chainId,n?.chain?.chainId),u=!ge(t.txHash,o.txHash,o.transactionHash,n?.txHash,n?.transactionHash)||!ge(t.family,o.family,o.chain?.family,n?.family,n?.chain?.family)||!ge(t.chainId,o.chainId,o.chain?.chainId,n?.chainId,n?.chain?.chainId),i=Mt(t,d,l,s&&!u?n:null),c=Ht(A(n?.receiptStatus,n?.executionStatus,n?.status)),f=A(t.reconciliationStatus,t.reconciliation?.status,n?.reconciliationStatus),p=A(t.finalityState,t.finalityEvidence?.status,t.evidence?.status,n?.finalityState),y="UNKNOWN";Ke(f)||!u&&(s&&c==="FAIL"||Ke(p))?y="FAIL":!u&&a&&s&&c==="SUCCESS"&&["INCLUDED","FINAL"].includes(i.status)&&(y="SUCCESS");let h={verifiedReceiptVersion:Lt,status:y};u&&(h.reason="REFERENCE_MISMATCH"),R(h,"txHash",a),R(h,"chain",A(t.chain,o.chain,n?.chain)),R(h,"family",d),R(h,"chainId",l),R(h,"block",A(n?.block,t.block)),R(h,"blockState",A(n?.blockState,n?.inclusionState)),h.finalityState=i.status,R(h,"confirmations",A(n?.confirmations,n?.finality?.confirmations,t.finalityEvidence?.confirmations,t.evidence?.confirmations)),R(h,"observedAt",A(n?.observedAt,t.observedAt)),R(h,"route",A(t.route,o.route)),R(h,"prepareHash",A(t.prepareHash,o.prepareHash)),R(h,"policyOutcome",A(t.policyOutcome,o.policyOutcome,o.policyChecks));let b=A(t.balanceChanges,n?.balanceChanges,n?.balances,o.balanceChanges,o.balances);return b!=null&&(h.balanceChanges=Ee(b)),R(h,"createdAt",A(t.createdAt,o.createdAt)),R(h,"submittedAt",A(t.submittedAt,o.submittedAt)),R(h,"finalizedAt",A(t.finalizedAt,n?.finalizedAt)),R(h,"timestamps",A(t.timestamps,o.timestamps,n?.timestamps)),P(h)}import{createHash as Wt}from"node:crypto";import{types as M}from"node:util";import{AsyncLocalStorage as vt}from"node:async_hooks";var Ft=new vt,Dt=["http","retry","shared"],zt=512;function ce(e){let t=Ft.getStore();if(!t||t.closed||!Dt.includes(e))return null;if(t.spans.length>=zt)return t.droppedSpans++,null;let r={stage:e,startMs:t.now()-t.start,durationMs:null,outcome:"pending",status:null};return t.spans.push(r),(o,n=null)=>{t.closed||r.durationMs!==null||(r.durationMs=Math.max(0,t.now()-t.start-r.startMs),r.outcome=o==="succeeded"?"succeeded":"failed",r.status=Number.isInteger(n)&&n>=100&&n<=599?n:null)}}import V from"node:net";import Bt from"node:dns";var Vt=new Set(["localhost","metadata.google.internal","metadata.goog"]);function le(e){let t=String(e).toLowerCase().split("%")[0];if((t.match(/::/g)||[]).length>1)return null;let r=i=>{if(!i)return[];let c=i.split(":"),f=c.at(-1);if(f?.includes(".")){let p=f.split(".").map(Number);if(p.length!==4||p.some(y=>!Number.isInteger(y)||y<0||y>255))return null;c.splice(c.length-1,1,(p[0]<<8|p[1]).toString(16),(p[2]<<8|p[3]).toString(16))}return c.some(p=>!/^[0-9a-f]{1,4}$/.test(p))?null:c.map(p=>Number.parseInt(p,16))},[o,n]=t.split("::"),s=r(o),a=r(n);if(!s||!a)return null;let d=t.includes("::"),l=8-s.length-a.length;if(!d&&l!==0||d&&l<1)return null;let u=[...s,...Array(Math.max(0,l)).fill(0),...a];return u.length!==8?null:Uint8Array.from(u.flatMap(i=>[i>>8,i&255]))}function Ae(e,t,r){let o=Math.floor(r/8),n=r%8;for(let a=0;a<o;a+=1)if(e[a]!==t[a])return!1;if(!n)return!0;let s=255<<8-n;return(e[o]&s)===(t[o]&s)}function Se(e){if(V.isIPv4(e)){let t=e.split(".").map(Number);return!(t[0]===0||t[0]===10||t[0]===127||t[0]>=224||t[0]===100&&t[1]>=64&&t[1]<=127||t[0]===169&&t[1]===254||t[0]===172&&t[1]>=16&&t[1]<=31||t[0]===192&&(t[1]===0||t[1]===2||t[1]===168)||t[0]===192&&t[1]===88&&t[2]===99||t[0]===198&&(t[1]===18||t[1]===19||t[1]===51)||t[0]===203&&t[1]===0&&t[2]===113)}if(V.isIPv6(e)){let t=le(e);if(!t)return!1;let r=le("::ffff:0:0");return Ae(t,r,96)?Se([...t.slice(12)].join(".")):Ae(t,le("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([n,s])=>Ae(t,le(n),s)):!1}return!1}function Gt(e){let t;try{t=new URL(String(e))}catch{return{ok:!1,error:`not a valid URL: ${String(e).slice(0,120)}`}}if(t.protocol!=="http:"&&t.protocol!=="https:")return{ok:!1,error:`refused protocol ${t.protocol} (only http/https)`};let r=t.hostname.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,"");if(Vt.has(r)||r.endsWith(".localhost")||r.endsWith(".internal"))return{ok:!1,error:`refused internal host ${r}`};let o=V.isIP(r);return o!==0&&!Se(r)?{ok:!1,error:`refused private address ${r}`}:{ok:!0,url:t,host:r,isLiteralIp:o!==0}}async function xe(e,{lookupFn:t=Bt.promises.lookup}={}){let r=Gt(e);if(!r.ok)return r;if(r.isLiteralIp)return{ok:!0,url:r.url,addresses:[{address:r.host,family:V.isIPv6(r.host)?6:4}]};let o;try{o=await t(r.host,{all:!0,verbatim:!0})}catch{return{ok:!1,error:`refused: ${r.host} did not resolve`}}return!Array.isArray(o)||o.length===0||o.some(n=>!Se(n.address))?{ok:!1,error:`refused: ${r.host} resolves to a non-public address`}:{ok:!0,url:r.url,addresses:o}}async function Te({requireUndici:e=!1,importUndici:t=()=>import("undici")}={}){let r,o;try{let c=await t();r=c.Agent,o=c.fetch}catch(c){if(e)throw new Error(`egress-guard: untrustedUrl pinning requires the undici package, which failed to load: ${c?.message||c}`);return null}if(typeof r!="function"||typeof o!="function"){if(e)throw new Error("egress-guard: untrustedUrl pinning requires undici's Agent and fetch exports, which were not found on the imported module");return null}let n=c=>String(c).toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,""),s=new Map,a=c=>(Array.isArray(c)?c:[c]).map(f=>typeof f=="string"?{address:f}:f).filter(f=>f&&f.address).map(f=>({address:f.address,family:f.family||(V.isIPv6(f.address)?6:4)})),d=(c,f,p)=>{s.set(n(c),a(typeof f=="string"?[{address:f,family:p}]:f))},l=c=>{let f=n(c);if(V.isIP(f))return[{address:f,family:V.isIPv6(f)?6:4}];let p=s.get(f);if(!p||!p.length)throw new Error(`refused: unpinned host ${c} during pinned fetch`);return p},u=new r({connect:{lookup(c,f,p){let y;try{y=l(c)}catch(h){return p(h)}return f?.all?p(null,y):p(null,y[0].address,y[0].family)}}}),i=Kt((c,f={})=>o(c,{...f,dispatcher:u}),d);return{dispatcher:u,fetch:i,pin:d,resolve:l,async close(){try{await u.destroy()}catch{}}}}var Oe=Symbol.for("oracle.egressGuard.pinCapableFetch");function Kt(e,t){if(typeof e!="function")throw new Error("markPinCapableFetch: fetchImpl must be a function");if(typeof t!="function")throw new Error("markPinCapableFetch: pin must be a function");return e[Oe]=Object.freeze({pin:t}),e}function Ie(e){return typeof e=="function"&&typeof e[Oe]?.pin=="function"}function We(e,t,r){if(!Ie(e))throw new Error("pinFetchToAddresses: fetchImpl is not pin-capable");e[Oe].pin(t,r)}var Jt=new Set([408,425,429,500,502,503,504]),Je=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),qt=2,qe=4e3,Yt=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"aborted")?.get,Xt=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"reason")?.get,Zt=AbortSignal.prototype.throwIfAborted,Qt=EventTarget.prototype.addEventListener,Ye=EventTarget.prototype.removeEventListener,Xe=typeof AbortSignal.any=="function"?AbortSignal.any.bind(AbortSignal):null,re=e=>e?Yt.call(e):!1,er=e=>e?Xt.call(e):void 0,tr=new Set([301,302,303,307,308]),fe=3,pn=64*1024,H=Object.freeze({depth:32,nodes:1e4,fields:1e4,arrayLength:1e4,bytes:1024*1024});function x(e){return F(`HTTP JSON body refused: ${e}`)}function rr(e){return["isArgumentsObject","isArrayBuffer","isAnyArrayBuffer","isArrayBufferView","isBoxedPrimitive","isDataView","isDate","isExternal","isGeneratorObject","isKeyObject","isCryptoKey","isMap","isMapIterator","isModuleNamespaceObject","isNativeError","isPromise","isRegExp","isSet","isSetIterator","isTypedArray","isWeakMap","isWeakSet"].some(t=>typeof M[t]=="function"&&M[t](e))}function nr(e){let t=[],r=0,o=0,n=0,s=0,a=new WeakSet,d=i=>{if(r+=Buffer.byteLength(i,"utf8"),r>H.bytes)throw x("serialized byte limit exceeded");t.push(i)},l=i=>{if(Buffer.byteLength(i,"utf8")>H.bytes)throw x("serialized byte limit exceeded");return JSON.stringify(i)},u=(i,c)=>{if(o+=1,o>H.nodes)throw x("node limit exceeded");if(c>H.depth)throw x("depth limit exceeded");if(i===null){d("null");return}if(typeof i=="string"){d(l(i));return}if(typeof i=="boolean"){d(i?"true":"false");return}if(typeof i=="number"){if(!Number.isFinite(i))throw x("non-finite number");d(Object.is(i,-0)?"0":String(i));return}if(typeof i!="object")throw x("unsupported non-JSON value");if(M.isProxy(i))throw x("proxy value");if(rr(i))throw x("unsupported exotic object");if(a.has(i))throw x("cyclic value");a.add(i);try{if(Object.getOwnPropertySymbols(i).length>0)throw x("symbol-keyed fields are unsupported");if(Array.isArray(i)){let y=Object.getPrototypeOf(i),h=0;for(;y!==null;){if(M.isProxy(y))throw x("proxy array prototype");if(h+=1,h>H.depth)throw x("array prototype depth limit exceeded");y=Object.getPrototypeOf(y)}if(i.length>H.arrayLength)throw x("array length limit exceeded");for(let S=0;S<i.length;S+=1){let U=Object.getOwnPropertyDescriptor(i,String(S));if(!U||!Object.hasOwn(U,"value")||U.enumerable!==!0)throw x("array entries must be dense enumerable own data")}let b=0;for(let S in i){if(s+=1,s>H.fields)throw x("enumeration limit exceeded");if(Object.hasOwn(i,S)&&(b+=1,b>i.length))throw x("named array fields are unsupported")}if(b!==i.length)throw x("array entries must be dense enumerable own data");d("[");for(let S=0;S<i.length;S+=1)S&&d(","),u(Object.getOwnPropertyDescriptor(i,String(S)).value,c+1);d("]");return}let f=Object.getPrototypeOf(i);if(f!==Object.prototype&&f!==null)throw x("non-plain object");let p=[];for(let y in i){if(s+=1,s>H.fields)throw x("enumeration limit exceeded");if(!Object.hasOwn(i,y))continue;if(n+=1,n>H.fields)throw x("field limit exceeded");let h=Object.getOwnPropertyDescriptor(i,y);if(!h||!Object.hasOwn(h,"value")||h.enumerable!==!0)throw x("object fields must be enumerable own data");p.push([y,h.value])}d("{");for(let y=0;y<p.length;y+=1)y&&d(","),d(l(p[y][0])),d(":"),u(p[y][1],c+1);d("}")}finally{a.delete(i)}};return u(e,0),t.join("")}function or(e){let t=Object.create(null);if(e==null)return t;if(typeof e!="object"&&typeof e!="function")throw new TypeError("HTTP headers must be an object");if(M.isProxy(e))throw new TypeError("HTTP headers must not be a proxy");if(Object.getOwnPropertySymbols(e).length>0)throw new TypeError("HTTP headers must not contain symbol fields");let r=new Set;for(let o of Object.keys(e)){if(!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/u.test(o))throw new TypeError("HTTP header names must be valid tokens");let n=o.toLowerCase();if(r.has(n))throw new TypeError("HTTP headers contain a duplicate canonical name");r.add(n);let s=Object.getOwnPropertyDescriptor(e,o);if(!s||!Object.hasOwn(s,"value"))throw new TypeError("HTTP headers must contain own data properties");let a=s.value;if(a==null||["object","function","symbol"].includes(typeof a))throw new TypeError("HTTP header values must be scalar");t[o]=String(a)}return t}function sr(){return Object.assign(Object.create(null),{Accept:"application/json"})}function ir(e,t){if(!e)throw new Error(`HTTP redirect from ${t} missing Location`);let r=new URL(String(e),String(t));if(r.protocol!=="http:"&&r.protocol!=="https:")throw new Error(`HTTP redirect from ${t} used unsupported protocol ${r.protocol}`);return r.toString()}function ar(e,t){return new URL(String(e)).origin===new URL(String(t)).origin}var Ne=new Map,Ze=new WeakMap,Qe=1;function ue(e){if((typeof e!="object"||e===null)&&typeof e!="function")return`${typeof e}:${String(e)}`;let t=Ze.get(e);return t||(t=Qe,Qe+=1,Ze.set(e,t)),`reference:${t}`}var cr=new Set(["eth_blockNumber","eth_call","eth_chainId","eth_estimateGas","getHealth","minimumLedgerSlot","net_version","simulateTransaction","web3_clientVersion"]),lr=new Set(["allMids","l2Book","outcomeMeta","spotClearinghouseState","userFills","meta","metaAndAssetCtxs","perpDexs","candleSnapshot","fundingHistory","openOrders","frontendOpenOrders","clearinghouseState","spotMeta","validatorSummaries","delegatorSummary","delegations","delegatorRewards","delegatorHistory","maxBuilderFee"]);function et(e){if(!e||typeof e!="object"||Array.isArray(e)||!Object.hasOwn(e,"jsonrpc")||!Object.hasOwn(e,"method")||e.jsonrpc!=="2.0")return!1;let t=typeof e.method=="string"?e.method:"";return t?cr.has(t)||/^get[A-Z0-9_]/u.test(t)||/^is[A-Z0-9_]/u.test(t)||/^eth_get[A-Z0-9_]/u.test(t):!1}function tt(e,t){if(e==="GET"&&t==null)return!0;if(e!=="POST"||t==null)return!1;let r=t;if(typeof t=="string")try{r=JSON.parse(t)}catch{return!1}if(Array.isArray(r))return r.length>0&&r.every(et);if(!r||typeof r!="object")return!1;if(Object.hasOwn(r,"jsonrpc")||Object.hasOwn(r,"method"))return et(r);let o=Object.hasOwn(r,"type")?r.type:null;return typeof o=="string"&&lr.has(o)&&(!Object.hasOwn(r,"action")||r.action==null)&&(!Object.hasOwn(r,"signature")||r.signature==null)&&(!Object.hasOwn(r,"nonce")||r.nonce==null)}function ur(e,t,r,o={},n=null){let s=Wt("sha256"),a=(l,u)=>{let i=String(u);s.update(String(Buffer.byteLength(l,"utf8"))).update(":").update(l),s.update("=").update(String(Buffer.byteLength(i,"utf8"))).update(":").update(i).update(`
2
+ `)};a("method",e),a("url",t),Object.keys(r||{}).map((l,u)=>({name:l.toLowerCase(),order:u,value:String(r[l])})).sort((l,u)=>l.name.localeCompare(u.name)||l.order-u.order).forEach((l,u)=>{a(`header-name-${u}`,l.name),a(`header-value-${u}`,l.value)}),a("body",n??"-");for(let l of["untrustedUrl","maxResponseBytes","sameOriginRedirectsOnly","redirectPolicy","maxRedirects","timeoutMs","retries","fetchImpl","realFetch","lookupFn","importUndici","validateResponse"])a(`context-${l}`,o[l]??"-");return s.digest("hex")}function fr(e,t){let r=Number(t);return Number.isFinite(r)&&r>0?Math.min(r*1e3,qe):Math.min(250*2**e,qe)+Math.floor(Math.random()*100)}var dr=e=>new Promise(t=>setTimeout(t,e));function F(e,t={}){let r=new Error(e);return r.retryable=!1,Object.assign(r,t),r}function Re(e,t,r){return F(`HTTP response from ${e} exceeded maxResponseBytes ${r} (${t})`,{oversize:!0})}function G(e){try{let t=e?.body?.cancel?.();t&&typeof t.then=="function"&&t.catch(()=>{})}catch{}}function pr(e){return e?e.byteLength??e.length??0:0}async function hr(e,t,{url:r,truncate:o=!1,onOversize:n}={}){if(t==null)return await e.text();let s=Number(e.headers?.get?.("content-length"));if(Number.isFinite(s)&&s>t&&(G(e),!o))throw Re(r,`content-length ${s}`,t);let a=e.body?.getReader?.();if(!a){let c=await e.text(),f=Buffer.byteLength(c,"utf8");if(f>t){if(!o)throw Re(r,`body ${f} bytes`,t);return Buffer.from(c,"utf8").subarray(0,t).toString("utf8")}return c}let d=[],l=0,u=!1;try{for(;;){let{value:c,done:f}=await a.read();if(f)break;if(c&&(d.push(Buffer.from(c)),l+=pr(c),l>t)){u=!0;break}}}finally{if(u)try{await a.cancel()}catch{}try{a.releaseLock?.()}catch{}}if(u&&(typeof n=="function"&&n(),!o))throw Re(r,`streamed ${l} bytes`,t);let i=Buffer.concat(d);return(u?i.subarray(0,t):i).toString("utf8")}function mr(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}async function yr(e,{fetchImpl:t,method:r,headers:o,body:n,timeoutMs:s,lookupFn:a,realFetch:d,untrustedUrl:l=!1,maxResponseBytes:u=null,sameOriginRedirectsOnly:i=!1,importUndici:c,validateResponse:f,signal:p,redirectPolicy:y="follow",maxRedirects:h=fe}){let b=null,S=t,U=a?{lookupFn:a}:{};if(l&&!d&&!Ie(S))throw F(`HTTP refused ${e}: untrustedUrl requires a pin-capable fetchImpl (see markPinCapableFetch in egress-guard.mjs) or no fetchImpl override so Oracle can pin the connection itself`);let $=new AbortController,k=setTimeout(()=>$.abort(),s),W=p?Xe?Xe([p,$.signal]):p:$.signal,J=async(w,{status:O=null}={})=>{let I=await xe(w,U);if(!I.ok)throw F(O==null?`HTTP refused ${w}: ${I.error}`:`HTTP redirect to ${w} ${I.error}`,O==null?{}:{status:O});let v=new URL(w).hostname;if(d){if(b&&(await b.close(),b=null),!b)try{b=await Te({requireUndici:!0,...c?{importUndici:c}:{}})}catch(m){throw F(O==null?`HTTP refused ${w}: ${m?.message||m}`:`HTTP redirect to ${w} refused: ${m?.message||m}`,O==null?{}:{status:O})}b.pin(v,I.addresses),S=b.fetch}else We(S,v,I.addresses);return I};try{let w=String(e),O=Object.assign(Object.create(null),o||{});l&&await J(w);for(let I=0;I<=h;I+=1){let v=Object.assign(Object.create(null),{method:r,headers:O,body:n,signal:W,redirect:"manual",dispatcher:void 0}),m=await S(w,v);if((y==="error"||h===0)&&m.status>=300&&m.status<400)throw G(m),F(`HTTP ${m.status} ${r} redirect refused`,{status:m.status,redirectRefused:!0});if(tr.has(m.status)){let _=i===!0&&r==="POST"&&[307,308].includes(m.status)&&tt(r,n);if(r!=="GET"&&r!=="HEAD"&&!_){G(m);let T=new Error(`HTTP ${m.status} ${r} ${w} redirected non-idempotent request`);throw T.status=m.status,T}if(I===h)throw G(m),F(`HTTP ${m.status} ${r} redirect budget exhausted`,{status:m.status,redirectRefused:!0});let Ce=m.headers?.get?.("location"),C;try{C=ir(Ce,w)}catch(T){throw G(m),T}let D=!ar(C,w);if(G(m),D&&r==="POST"){let T=new Error(`HTTP ${m.status} ${r} cross-origin redirect refused`);throw T.status=m.status,T}if(D&&i){let T=new Error(`HTTP ${m.status} ${r} cross-origin redirect refused`);throw T.status=m.status,T.retryable=!1,T}if(D&&(O=sr(O)),l)await J(C,{status:m.status});else if(D){let T=await xe(C,U);if(!T.ok){let E=new Error(`HTTP redirect from ${w} ${T.error}`);throw E.status=m.status,E.retryable=!1,E}d&&T.addresses?.length&&(b||(b=await Te(c?{importUndici:c}:{})),b&&(b.pin(new URL(C).hostname,T.addresses),S=b.fetch))}w=C;continue}if(typeof f=="function")try{await f(m,{url:w})}catch(_){throw G(m),F(_?.message||String(_))}let N=await hr(m,u,{url:w,onOversize:()=>$.abort()}),q=mr(N);if(!m.ok){let _=new Error(`HTTP ${m.status} ${r} ${w}`);throw _.status=m.status,_.retryAfter=m.headers?.get?.("retry-after")??null,_.body=q??N.slice(0,300),_}return q??N}throw new Error(`HTTP redirect loop for ${e}`)}catch(w){if($.signal.aborted&&!re(p)){let O=w&&(typeof w=="object"||typeof w=="function")&&!M.isProxy(w)?w:null,I=O?Object.getOwnPropertyDescriptor(O,"oversize"):null;if(!(I&&Object.hasOwn(I,"value")&&I.value===!0))try{if(!O)throw new TypeError("unsafe rejection");Object.defineProperties(O,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}})}catch{let m=new Error("HTTP request timed out");throw Object.defineProperties(m,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}}),m}}throw w}finally{clearTimeout(k),b&&await b.close()}}async function rt(e,t={}){if(t!=null&&typeof t!="object"&&typeof t!="function")throw new TypeError("HTTP options must be an object");if(t!=null&&M.isProxy(t))throw new TypeError("HTTP options must not be a proxy");let r=new Set(["body","dedupe","fetchImpl","headers","importUndici","lookupFn","maxRedirects","maxResponseBytes","method","redirectPolicy","retries","sameOriginRedirectsOnly","signal","timeoutMs","untrustedUrl","validateResponse"]);if(t!=null){if(Object.getOwnPropertySymbols(t).length>0)throw new TypeError("HTTP options contain unknown fields");for(let E of Object.getOwnPropertyNames(t)){let g=Object.getOwnPropertyDescriptor(t,E);if(!(E==="toJSON"&&g&&Object.hasOwn(g,"value")&&g.value===void 0)){if(!r.has(E))throw new TypeError("HTTP options contain unknown fields");if(!g||!g.enumerable||!Object.hasOwn(g,"value"))throw new TypeError("HTTP options must contain enumerable own data properties")}}}let o=E=>{if(t==null||!Object.hasOwn(t,E))return;let g=Object.getOwnPropertyDescriptor(t,E);if(!g||!Object.hasOwn(g,"value"))throw new TypeError("HTTP options must contain own data properties");return g.value};if(typeof e!="string"||e.length===0||e.length>8192)throw new TypeError("HTTP URL must be a bounded string");let n=o("method");if(n!==void 0&&(typeof n!="string"||!/^[A-Za-z]+$/u.test(n)))throw new TypeError("HTTP method must be a string token");let s=o("timeoutMs");if(s!==void 0&&(!Number.isInteger(s)||s<1||s>12e4))throw new TypeError("HTTP timeoutMs must be a bounded integer");let a=o("retries");if(a!==void 0&&(!Number.isInteger(a)||a<0||a>10))throw new TypeError("HTTP retries must be a bounded integer");let d=o("redirectPolicy");if(d!==void 0&&d!=="follow"&&d!=="error")throw new TypeError('HTTP redirectPolicy must be "follow" or "error"');let l=o("maxRedirects");if(l!==void 0&&(!Number.isInteger(l)||l<0||l>fe))throw new TypeError(`HTTP maxRedirects must be an integer from 0 through ${fe}`);if(d==="error"&&l!==void 0&&l!==0)throw new TypeError('HTTP redirectPolicy "error" requires maxRedirects 0 when supplied');let u=d??"follow",i=u==="error"?0:l??fe;for(let E of["dedupe","untrustedUrl","sameOriginRedirectsOnly"]){let g=o(E);if(g!==void 0&&typeof g!="boolean")throw new TypeError(`HTTP ${E} must be boolean`)}let c=o("maxResponseBytes");if(c!==void 0&&(!Number.isInteger(c)||c<1||c>64*1024*1024))throw new TypeError("HTTP maxResponseBytes must be a bounded integer");let f=o("signal");if(f!==void 0){if(M.isProxy(f)||!(f instanceof AbortSignal))throw new TypeError("HTTP signal must be a native AbortSignal");try{re(f)}catch{throw new TypeError("HTTP signal must be a native AbortSignal")}}for(let E of["importUndici","lookupFn","validateResponse"]){let g=o(E);if(g!==void 0&&typeof g!="function")throw new TypeError(`HTTP ${E} must be a function`)}let p=o("fetchImpl"),y=p||globalThis.fetch;if(typeof y!="function")throw new Error("fetch unavailable \u2014 pass opts.fetchImpl");let h=s??12e3,b=(n||"GET").toUpperCase(),S=o("headers"),U=or(S),$=Object.assign(Object.create(null),U);Object.keys($).some(E=>E.toLowerCase()==="accept")||($.Accept="application/json");let k=o("body");k!=null&&typeof k!="string"&&(Object.keys($).find(g=>g.toLowerCase()==="content-type")||($["Content-Type"]="application/json"),k=nr(k));let W=a??qt,J=o("lookupFn"),w=!p,O=o("untrustedUrl")===!0,I=o("sameOriginRedirectsOnly")===!0,v=o("importUndici"),m=o("validateResponse"),N=f,q=c??null,_=async()=>{let E;for(let g=0;g<=W;g++){N&&Zt.call(N);let ke=ce("http");try{let j=await yr(e,{fetchImpl:y,method:b,headers:$,body:k,timeoutMs:h,lookupFn:J,realFetch:w,untrustedUrl:O,maxResponseBytes:q,sameOriginRedirectsOnly:I,importUndici:v,validateResponse:m,signal:N,redirectPolicy:u,maxRedirects:i});return ke?.("succeeded"),j}catch(j){E=j;let K=de=>{if(!j||typeof j!="object"&&typeof j!="function"||M.isProxy(j))return;let Y=Object.getOwnPropertyDescriptor(j,de);return Y&&Object.hasOwn(Y,"value")?Y.value:void 0},se=K("status");ke?.("failed",se);let ft=K("oracleTimeout")===!0||K("name")==="AbortError"||K("name")==="TimeoutError"||re(N),dt=new Set([408,425,429]),pt=K("retryable")===!1?!1:se!=null?dt.has(se)||Jt.has(se)&&Je.has(b):!ft&&Je.has(b);if(g===W||!pt)throw j;let je=fr(g,K("retryAfter")),ht=ce("retry"),Le=!1;try{N?await new Promise((de,Y)=>{let He,X=()=>{clearTimeout(He),Ye.call(N,"abort",X),Y(er(N)||new DOMException("Aborted","AbortError"))};if(re(N)){X();return}He=setTimeout(()=>{Ye.call(N,"abort",X),de()},je),Qt.call(N,"abort",X,{once:!0}),re(N)&&X()}):await dr(je),Le=!0}finally{ht?.(Le?"succeeded":"failed")}}}throw E};if(!(o("dedupe")!==!1&&!N&&tt(b,k)))return _();let C=ur(b,e,$,{untrustedUrl:O,maxResponseBytes:q,sameOriginRedirectsOnly:I,redirectPolicy:u,maxRedirects:i,timeoutMs:h,retries:W,fetchImpl:ue(y),realFetch:w,lookupFn:ue(J),importUndici:ue(v),validateResponse:ue(m)},k),D=Ne.get(C);if(D){let E=ce("shared");try{let g=await D;return E?.("succeeded"),g}catch(g){throw E?.("failed"),g}}let T=_().finally(()=>Ne.delete(C));return Ne.set(C,T),T}var nt={robinhood:{chainId:4663,name:"Robinhood Chain",rpcEnv:["RH_CHAIN_RPC"],evm:!0},ethereum:{chainId:1,name:"Ethereum",rpcEnv:["ETH_RPC_URL","ETHEREUM_RPC_URL","MAINNET_RPC_URL"],evm:!0},polygon:{chainId:137,name:"Polygon",rpcEnv:["POLYGON_RPC_URL","POLYGON_RPC"],evm:!0},arbitrum:{chainId:42161,name:"Arbitrum One",rpcEnv:["ARBITRUM_RPC_URL","ARB_RPC_URL"],evm:!0},base:{chainId:8453,name:"Base",rpcEnv:["BASE_RPC_URL"],evm:!0},hyperevm:{chainId:999,name:"HyperEVM",rpcEnv:["HYPEREVM_RPC_URL","HYPER_EVM_RPC"],evm:!0},bsc:{chainId:56,name:"BNB Smart Chain",rpcEnv:["BSC_RPC_URL","BNB_RPC_URL"],evm:!0},avalanche:{chainId:43114,name:"Avalanche C-Chain",rpcEnv:["AVALANCHE_RPC_URL","AVAX_RPC_URL"],evm:!0},optimism:{chainId:10,name:"OP Mainnet",rpcEnv:["OPTIMISM_RPC_URL","OP_RPC_URL"],evm:!0},abstract:{chainId:2741,name:"Abstract",rpcEnv:["ABSTRACT_RPC_URL","ABS_RPC_URL"],evm:!0},stable:{chainId:988,name:"Stable Mainnet",rpcEnv:["STABLE_RPC_URL","STABLE_RPC"],evm:!0}},br=new Map(Object.values(nt).map(e=>[e.chainId,e]));function ot(e){return br.get(Number(e))||null}function st(e,t=process.env){let r=ot(e);if(!r)return null;for(let o of r.rpcEnv){let n=(t[o]||"").trim();if(n)return n}return null}import{Interface as wr,getAddress as gr}from"ethers";var En=new wr(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);function $e(e,t){try{return gr(e).toLowerCase()}catch{throw new Error(`${t} must be a valid EVM address`)}}function Er(e){let t=String(e||"").trim();if(!/^0x[0-9a-fA-F]{64}$/.test(t))throw new Error("txHash must be a 32-byte hex transaction hash");return t.toLowerCase()}function _e(e){return e==null?null:Number.parseInt(String(e),16)}var Ar={1:"https://ethereum.publicnode.com",137:"https://polygon-bor-rpc.publicnode.com",42161:"https://arbitrum-one-rpc.publicnode.com",8453:"https://base-rpc.publicnode.com",10:"https://optimism-rpc.publicnode.com",988:"https://rpc.stable.xyz",56:"https://bsc-rpc.publicnode.com",43114:"https://avalanche-c-chain-rpc.publicnode.com",999:"https://rpc.hyperliquid.xyz/evm",2741:"https://api.mainnet.abs.xyz",4663:"https://rpc.mainnet.chain.robinhood.com"};function Sr(e,{rpcUrl:t,env:r=process.env}={}){if(t)return t;let o=st(e,r);return o||Ar[Number(e)]||null}var xr=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/;function Tr(e){let t=String(e||""),r=t.toLowerCase();if(t!==t.trim()||!/^[a-zA-Z0-9_]+$/.test(t)||!xr.test(r))throw new Error(`evm-rpc: ${t} refused \u2014 @oracle-agent/oracle is prepare-only (read RPC only; no broadcast/sign)`);return r}var ne=new Map,it=new Map;function Or(e){let t=new Error(e?.message||JSON.stringify(e));return t.code=e?.code,t}function Ir(e){if(e?.error)throw Or(e.error);return e?.result}function Nr(e,t,r){return`${e}
3
3
  ${t}
4
- ${JSON.stringify(r??[])}`}async function Er(e,t,r){return Qe(e,{method:"POST",body:t,fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3,signal:r.signal})}async function _e(e,t,r=[],o={}){let n=String(t||""),s=yr(n),a=hr(e,o);if(!a)throw new Error(`No RPC URL for chainId ${e} (set env from chain registry rpcEnv or pass rpcUrl)`);if(s==="eth_chainid"&&o.cacheChainId!==!1){let i=nt.get(a);if(i!=null)return i}let l=o.dedupe!==!1&&!o.signal?gr(a,n,r):null;if(l&&ne.has(l))return ne.get(l);let u=(async()=>{let i=await Er(a,{jsonrpc:"2.0",id:1,method:t,params:r},o),c=wr(i);return s==="eth_chainid"&&typeof c=="string"&&nt.set(a,c),c})();return l&&(ne.set(l,u),u.finally(()=>{ne.get(l)===u&&ne.delete(l)}).catch(()=>{})),u}async function ot(e={},t={}){let r=Number(e.chainId??t.chainId??1),o=dr(e.txHash||e.hash||e.transactionHash),n=await _e(r,"eth_getTransactionReceipt",[o],t);if(!n)return{ok:!1,chainId:r,txHash:o,status:"pending",receipt:null,reason:"receipt pending"};let s=$e(n.status),a=s===1,d=s===1?"success":s===0?"reverted":"unknown",l=a?null:d==="reverted"?"transaction reverted":"unknown receipt status",u=e.expectedTo?Re(e.expectedTo,"expectedTo"):null,i=n.to?Re(n.to,"receipt.to"):null;return u&&i!==u&&(a=!1,l=`to mismatch: expected ${u}, got ${i||"null"}`),{ok:a,chainId:r,txHash:o,status:d,reason:l,statusCode:s,to:i,from:n.from?Re(n.from,"receipt.from"):null,blockNumber:$e(n.blockNumber),transactionIndex:$e(n.transactionIndex),logs:Array.isArray(n.logs)?n.logs:[],receipt:n}}var Ar=/^0x[0-9a-f]{64}$/;function Sr(e){if(e==null)return null;let t=typeof e=="number"?e:Number.parseInt(String(e),16);return Number.isSafeInteger(t)?t:null}async function xr({txHash:e,chainId:t,rpcUrl:r},o={}){let n=String(e||"").trim().toLowerCase();if(!Ar.test(n))throw new TypeError("observe receipt: txHash must be a 32-byte hash");let s=Number(t);if(!Number.isSafeInteger(s)||s<=0)throw new TypeError("observe receipt: chainId required");let a=o.transactionReceipt||ot,d=o.rpcCall||_e,l={...o.rpcOptions||{},...r?{rpcUrl:r}:{}},u;try{u=await a({txHash:n,chainId:s},l)}catch(p){return{observation:null,reason:`RPC_UNAVAILABLE: ${p.message}`}}if(!u||u.receipt==null)return{observation:null,reason:u?.reason||"receipt pending"};let i=null,c=u.blockNumber;if(Number.isSafeInteger(c))try{let p=Sr(await d(s,"eth_blockNumber",[],l));p!=null&&p>=c&&(i=p-c+1)}catch{}let f={txHash:n,family:"evm",chainId:String(s),receiptStatus:u.status==="success"?"SUCCESS":u.status==="reverted"?"FAIL":"UNKNOWN",block:c==null?void 0:String(c),observedAt:new Date().toISOString(),finality:{status:"LIVE",...i==null?{}:{confirmations:i}}};return i!=null&&(f.confirmations=i),{observation:f,reason:null}}async function st({txHash:e,chainId:t,confirmations:r=1,rpcUrl:o},n={}){let{observation:s,reason:a}=await xr({txHash:e,chainId:t,rpcUrl:o},n),d=ie({txHash:String(e).trim().toLowerCase(),family:"evm",chainId:String(Number(t)),finalityRule:{rule:"confirmations",confirmations:r},...s?{observation:s}:{}});return{receipt:d,observed:!!s,final:d.finalityState==="FINAL",requiredConfirmations:r,reason:a}}var it={SUCCESS:0,FAIL:2,UNKNOWN:3};function oe(e,t){let r=e.find(n=>n.startsWith(`--${t}=`));if(r)return r.split("=").slice(1).join("=");let o=e.indexOf(`--${t}`);return o>=0?e[o+1]:void 0}function at(e,{observed:t,reason:r,final:o,requiredConfirmations:n}){let s=[`${e.status} ${e.txHash||"no hash"}`];return e.reason&&s.push(` reason ${e.reason}`),s.push(` finality ${e.finalityState}${o?"":` (below pinned depth ${n})`}`),e.confirmations!=null&&s.push(` confirmations ${e.confirmations}`),e.block!=null&&s.push(` block ${e.block}`),e.chainId!=null&&s.push(` chain ${e.family||"evm"}:${e.chainId}`),!t&&r&&s.push(` not observed ${r}`),e.status==="UNKNOWN"&&s.push(" UNKNOWN is not success. No observed chain state means the action is unproven."),`${s.join(`
4
+ ${JSON.stringify(r??[])}`}async function Rr(e,t,r){return rt(e,{method:"POST",body:t,fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3,signal:r.signal})}async function Pe(e,t,r=[],o={}){let n=String(t||""),s=Tr(n),a=Sr(e,o);if(!a)throw new Error(`No RPC URL for chainId ${e} (set env from chain registry rpcEnv or pass rpcUrl)`);if(s==="eth_chainid"&&o.cacheChainId!==!1){let i=it.get(a);if(i!=null)return i}let l=o.dedupe!==!1&&!o.signal?Nr(a,n,r):null;if(l&&ne.has(l))return ne.get(l);let u=(async()=>{let i=await Rr(a,{jsonrpc:"2.0",id:1,method:t,params:r},o),c=Ir(i);return s==="eth_chainid"&&typeof c=="string"&&it.set(a,c),c})();return l&&(ne.set(l,u),u.finally(()=>{ne.get(l)===u&&ne.delete(l)}).catch(()=>{})),u}async function at(e={},t={}){let r=Number(e.chainId??t.chainId??1),o=Er(e.txHash||e.hash||e.transactionHash),n=await Pe(r,"eth_getTransactionReceipt",[o],t);if(!n)return{ok:!1,chainId:r,txHash:o,status:"pending",receipt:null,reason:"receipt pending"};let s=_e(n.status),a=s===1,d=s===1?"success":s===0?"reverted":"unknown",l=a?null:d==="reverted"?"transaction reverted":"unknown receipt status",u=e.expectedTo?$e(e.expectedTo,"expectedTo"):null,i=n.to?$e(n.to,"receipt.to"):null;return u&&i!==u&&(a=!1,l=`to mismatch: expected ${u}, got ${i||"null"}`),{ok:a,chainId:r,txHash:o,status:d,reason:l,statusCode:s,to:i,from:n.from?$e(n.from,"receipt.from"):null,blockNumber:_e(n.blockNumber),transactionIndex:_e(n.transactionIndex),logs:Array.isArray(n.logs)?n.logs:[],receipt:n}}var $r=/^0x[0-9a-f]{64}$/;function _r(e){if(e==null)return null;let t=typeof e=="number"?e:Number.parseInt(String(e),16);return Number.isSafeInteger(t)?t:null}async function Pr({txHash:e,chainId:t,rpcUrl:r},o={}){let n=String(e||"").trim().toLowerCase();if(!$r.test(n))throw new TypeError("observe receipt: txHash must be a 32-byte hash");let s=Number(t);if(!Number.isSafeInteger(s)||s<=0)throw new TypeError("observe receipt: chainId required");let a=o.transactionReceipt||at,d=o.rpcCall||Pe,l={...o.rpcOptions||{},...r?{rpcUrl:r}:{}},u;try{u=await a({txHash:n,chainId:s},l)}catch(p){return{observation:null,reason:`RPC_UNAVAILABLE: ${p.message}`}}if(!u||u.receipt==null)return{observation:null,reason:u?.reason||"receipt pending"};let i=null,c=u.blockNumber;if(Number.isSafeInteger(c))try{let p=_r(await d(s,"eth_blockNumber",[],l));p!=null&&p>=c&&(i=p-c+1)}catch{}let f={txHash:n,family:"evm",chainId:String(s),receiptStatus:u.status==="success"?"SUCCESS":u.status==="reverted"?"FAIL":"UNKNOWN",block:c==null?void 0:String(c),observedAt:new Date().toISOString(),finality:{status:"LIVE",...i==null?{}:{confirmations:i}}};return i!=null&&(f.confirmations=i),{observation:f,reason:null}}async function ct({txHash:e,chainId:t,confirmations:r=1,rpcUrl:o},n={}){let{observation:s,reason:a}=await Pr({txHash:e,chainId:t,rpcUrl:o},n),d=ae({txHash:String(e).trim().toLowerCase(),family:"evm",chainId:String(Number(t)),finalityRule:{rule:"confirmations",confirmations:r},...s?{observation:s}:{}});return{receipt:d,observed:!!s,final:d.finalityState==="FINAL",requiredConfirmations:r,reason:a}}var lt={SUCCESS:0,FAIL:2,UNKNOWN:3};function oe(e,t){let r=e.find(n=>n.startsWith(`--${t}=`));if(r)return r.split("=").slice(1).join("=");let o=e.indexOf(`--${t}`);return o>=0?e[o+1]:void 0}function ut(e,{observed:t,reason:r,final:o,requiredConfirmations:n}){let s=[`${e.status} ${e.txHash||"no hash"}`];return e.reason&&s.push(` reason ${e.reason}`),s.push(` finality ${e.finalityState}${o?"":` (below pinned depth ${n})`}`),e.confirmations!=null&&s.push(` confirmations ${e.confirmations}`),e.block!=null&&s.push(` block ${e.block}`),e.chainId!=null&&s.push(` chain ${e.family||"evm"}:${e.chainId}`),!t&&r&&s.push(` not observed ${r}`),e.status==="UNKNOWN"&&s.push(" UNKNOWN is not success. No observed chain state means the action is unproven."),`${s.join(`
5
5
  `)}
6
- `}var yn={name:"receipt",summary:"verify an on-chain action against observed chain state (never trust a bare hash)",group:"read",usage:"oracle receipt --hash <txid> --chain <chainId> [--confirmations N] [--rpc-url URL] [--json] [--quiet]",async run(e){let t=e.argv||[],r=t.includes("--quiet"),o=t.indexOf("--json"),n=o>=0?t[o+1]:void 0;if(n&&!n.startsWith("--")){let h;try{h=JSON.parse(n)}catch(A){return process.stderr.write(`receipt: bad json: ${A.message}
7
- `),1}let b;try{b=ie(h)}catch(A){return process.stderr.write(`receipt: ${A.message}
6
+ `}var Nn={name:"receipt",summary:"verify an on-chain action against observed chain state (never trust a bare hash)",group:"read",usage:"oracle receipt --hash <txid> --chain <chainId> [--confirmations N] [--rpc-url URL] [--json] [--quiet]",async run(e){let t=e.argv||[],r=t.includes("--quiet"),o=t.indexOf("--json"),n=o>=0?t[o+1]:void 0;if(n&&!n.startsWith("--")){let h;try{h=JSON.parse(n)}catch(S){return process.stderr.write(`receipt: bad json: ${S.message}
7
+ `),1}let b;try{b=ae(h)}catch(S){return process.stderr.write(`receipt: ${S.message}
8
8
  `),1}return process.stdout.write(r?`${JSON.stringify(b)}
9
- `:at(b,{observed:!0,reason:null})),it[b.status]}let s=oe(t,"hash");if(!s)return process.stderr.write(`receipt: --hash required
9
+ `:ut(b,{observed:!0,reason:null})),lt[b.status]}let s=oe(t,"hash");if(!s)return process.stderr.write(`receipt: --hash required
10
10
  usage: ${this.usage}
11
11
  `),1;let a=oe(t,"chain")??oe(t,"chainId");if(!a)return process.stderr.write(`receipt: --chain <chainId> required to observe chain state
12
12
  `),1;let d=oe(t,"confirmations"),l=d==null?1:Number(d);if(!Number.isSafeInteger(l)||l<=0)return process.stderr.write(`receipt: --confirmations must be a positive integer
13
- `),1;let u;try{u=await st({txHash:s,chainId:a,confirmations:l,rpcUrl:oe(t,"rpc-url")})}catch(h){return process.stderr.write(`receipt: ${h.message}
13
+ `),1;let u;try{u=await ct({txHash:s,chainId:a,confirmations:l,rpcUrl:oe(t,"rpc-url")})}catch(h){return process.stderr.write(`receipt: ${h.message}
14
14
  `),1}let{receipt:i,observed:c,reason:f,final:p,requiredConfirmations:y}=u;return process.stdout.write(r?`${JSON.stringify({...i,observed:c,final:p,requiredConfirmations:y,...f?{notObserved:f}:{}})}
15
- `:at(i,{observed:c,reason:f,final:p,requiredConfirmations:y})),it[i.status]}};export{yn as default};
15
+ `:ut(i,{observed:c,reason:f,final:p,requiredConfirmations:y})),lt[i.status]}};export{Nn as default};
@@ -1,7 +1,7 @@
1
- import{keccak_256 as le}from"@noble/hashes/sha3.js";import{createHash as Ze}from"node:crypto";import{types as k}from"node:util";import B from"node:net";import We from"node:dns";var Ye=new Set(["localhost","metadata.google.internal","metadata.goog"]);function K(t){let e=String(t).toLowerCase().split("%")[0];if((e.match(/::/g)||[]).length>1)return null;let r=o=>{if(!o)return[];let a=o.split(":"),l=a.at(-1);if(l?.includes(".")){let h=l.split(".").map(Number);if(h.length!==4||h.some(m=>!Number.isInteger(m)||m<0||m>255))return null;a.splice(a.length-1,1,(h[0]<<8|h[1]).toString(16),(h[2]<<8|h[3]).toString(16))}return a.some(h=>!/^[0-9a-f]{1,4}$/.test(h))?null:a.map(h=>Number.parseInt(h,16))},[n,s]=e.split("::"),i=r(n),c=r(s);if(!i||!c)return null;let d=e.includes("::"),u=8-i.length-c.length;if(!d&&u!==0||d&&u<1)return null;let p=[...i,...Array(Math.max(0,u)).fill(0),...c];return p.length!==8?null:Uint8Array.from(p.flatMap(o=>[o>>8,o&255]))}function re(t,e,r){let n=Math.floor(r/8),s=r%8;for(let c=0;c<n;c+=1)if(t[c]!==e[c])return!1;if(!s)return!0;let i=255<<8-s;return(t[n]&i)===(e[n]&i)}function ne(t){if(B.isIPv4(t)){let e=t.split(".").map(Number);return!(e[0]===0||e[0]===10||e[0]===127||e[0]>=224||e[0]===100&&e[1]>=64&&e[1]<=127||e[0]===169&&e[1]===254||e[0]===172&&e[1]>=16&&e[1]<=31||e[0]===192&&(e[1]===0||e[1]===2||e[1]===168)||e[0]===192&&e[1]===88&&e[2]===99||e[0]===198&&(e[1]===18||e[1]===19||e[1]===51)||e[0]===203&&e[1]===0&&e[2]===113)}if(B.isIPv6(t)){let e=K(t);if(!e)return!1;let r=K("::ffff:0:0");return re(e,r,96)?ne([...e.slice(12)].join(".")):re(e,K("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([s,i])=>re(e,K(s),i)):!1}return!1}function qe(t){let e;try{e=new URL(String(t))}catch{return{ok:!1,error:`not a valid URL: ${String(t).slice(0,120)}`}}if(e.protocol!=="http:"&&e.protocol!=="https:")return{ok:!1,error:`refused protocol ${e.protocol} (only http/https)`};let r=e.hostname.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,"");if(Ye.has(r)||r.endsWith(".localhost")||r.endsWith(".internal"))return{ok:!1,error:`refused internal host ${r}`};let n=B.isIP(r);return n!==0&&!ne(r)?{ok:!1,error:`refused private address ${r}`}:{ok:!0,url:e,host:r,isLiteralIp:n!==0}}async function oe(t,{lookupFn:e=We.promises.lookup}={}){let r=qe(t);if(!r.ok)return r;if(r.isLiteralIp)return{ok:!0,url:r.url,addresses:[{address:r.host,family:B.isIPv6(r.host)?6:4}]};let n;try{n=await e(r.host,{all:!0,verbatim:!0})}catch{return{ok:!1,error:`refused: ${r.host} did not resolve`}}return!Array.isArray(n)||n.length===0||n.some(s=>!ne(s.address))?{ok:!1,error:`refused: ${r.host} resolves to a non-public address`}:{ok:!0,url:r.url,addresses:n}}async function se({requireUndici:t=!1,importUndici:e=()=>import("undici")}={}){let r,n;try{let a=await e();r=a.Agent,n=a.fetch}catch(a){if(t)throw new Error(`egress-guard: untrustedUrl pinning requires the undici package, which failed to load: ${a?.message||a}`);return null}if(typeof r!="function"||typeof n!="function"){if(t)throw new Error("egress-guard: untrustedUrl pinning requires undici's Agent and fetch exports, which were not found on the imported module");return null}let s=a=>String(a).toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,""),i=new Map,c=a=>(Array.isArray(a)?a:[a]).map(l=>typeof l=="string"?{address:l}:l).filter(l=>l&&l.address).map(l=>({address:l.address,family:l.family||(B.isIPv6(l.address)?6:4)})),d=(a,l,h)=>{i.set(s(a),c(typeof l=="string"?[{address:l,family:h}]:l))},u=a=>{let l=s(a);if(B.isIP(l))return[{address:l,family:B.isIPv6(l)?6:4}];let h=i.get(l);if(!h||!h.length)throw new Error(`refused: unpinned host ${a} during pinned fetch`);return h},p=new r({connect:{lookup(a,l,h){let m;try{m=u(a)}catch(R){return h(R)}return l?.all?h(null,m):h(null,m[0].address,m[0].family)}}}),o=Ke((a,l={})=>n(a,{...l,dispatcher:p}),d);return{dispatcher:p,fetch:o,pin:d,resolve:u,async close(){try{await p.destroy()}catch{}}}}var ae=Symbol.for("oracle.egressGuard.pinCapableFetch");function Ke(t,e){if(typeof t!="function")throw new Error("markPinCapableFetch: fetchImpl must be a function");if(typeof e!="function")throw new Error("markPinCapableFetch: pin must be a function");return t[ae]=Object.freeze({pin:e}),t}function ie(t){return typeof t=="function"&&typeof t[ae]?.pin=="function"}function be(t,e,r){if(!ie(t))throw new Error("pinFetchToAddresses: fetchImpl is not pin-capable");t[ae].pin(e,r)}var Xe=new Set([408,425,429,500,502,503,504]),ge=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),Qe=2,Te=4e3,et=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"aborted")?.get,tt=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"reason")?.get,rt=AbortSignal.prototype.throwIfAborted,nt=EventTarget.prototype.addEventListener,Ee=EventTarget.prototype.removeEventListener,Oe=typeof AbortSignal.any=="function"?AbortSignal.any.bind(AbortSignal):null,Y=t=>t?et.call(t):!1,ot=t=>t?tt.call(t):void 0,st=new Set([301,302,303,307,308]),X=3,Yt=64*1024,N=Object.freeze({depth:32,nodes:1e4,fields:1e4,arrayLength:1e4,bytes:1024*1024});function T(t){return $(`HTTP JSON body refused: ${t}`)}function at(t){return["isArgumentsObject","isArrayBuffer","isAnyArrayBuffer","isArrayBufferView","isBoxedPrimitive","isDataView","isDate","isExternal","isGeneratorObject","isKeyObject","isCryptoKey","isMap","isMapIterator","isModuleNamespaceObject","isNativeError","isPromise","isRegExp","isSet","isSetIterator","isTypedArray","isWeakMap","isWeakSet"].some(e=>typeof k[e]=="function"&&k[e](t))}function it(t){let e=[],r=0,n=0,s=0,i=0,c=new WeakSet,d=o=>{if(r+=Buffer.byteLength(o,"utf8"),r>N.bytes)throw T("serialized byte limit exceeded");e.push(o)},u=o=>{if(Buffer.byteLength(o,"utf8")>N.bytes)throw T("serialized byte limit exceeded");return JSON.stringify(o)},p=(o,a)=>{if(n+=1,n>N.nodes)throw T("node limit exceeded");if(a>N.depth)throw T("depth limit exceeded");if(o===null){d("null");return}if(typeof o=="string"){d(u(o));return}if(typeof o=="boolean"){d(o?"true":"false");return}if(typeof o=="number"){if(!Number.isFinite(o))throw T("non-finite number");d(Object.is(o,-0)?"0":String(o));return}if(typeof o!="object")throw T("unsupported non-JSON value");if(k.isProxy(o))throw T("proxy value");if(at(o))throw T("unsupported exotic object");if(c.has(o))throw T("cyclic value");c.add(o);try{if(Object.getOwnPropertySymbols(o).length>0)throw T("symbol-keyed fields are unsupported");if(Array.isArray(o)){let m=Object.getPrototypeOf(o),R=0;for(;m!==null;){if(k.isProxy(m))throw T("proxy array prototype");if(R+=1,R>N.depth)throw T("array prototype depth limit exceeded");m=Object.getPrototypeOf(m)}if(o.length>N.arrayLength)throw T("array length limit exceeded");for(let O=0;O<o.length;O+=1){let C=Object.getOwnPropertyDescriptor(o,String(O));if(!C||!Object.hasOwn(C,"value")||C.enumerable!==!0)throw T("array entries must be dense enumerable own data")}let w=0;for(let O in o){if(i+=1,i>N.fields)throw T("enumeration limit exceeded");if(Object.hasOwn(o,O)&&(w+=1,w>o.length))throw T("named array fields are unsupported")}if(w!==o.length)throw T("array entries must be dense enumerable own data");d("[");for(let O=0;O<o.length;O+=1)O&&d(","),p(Object.getOwnPropertyDescriptor(o,String(O)).value,a+1);d("]");return}let l=Object.getPrototypeOf(o);if(l!==Object.prototype&&l!==null)throw T("non-plain object");let h=[];for(let m in o){if(i+=1,i>N.fields)throw T("enumeration limit exceeded");if(!Object.hasOwn(o,m))continue;if(s+=1,s>N.fields)throw T("field limit exceeded");let R=Object.getOwnPropertyDescriptor(o,m);if(!R||!Object.hasOwn(R,"value")||R.enumerable!==!0)throw T("object fields must be enumerable own data");h.push([m,R.value])}d("{");for(let m=0;m<h.length;m+=1)m&&d(","),d(u(h[m][0])),d(":"),p(h[m][1],a+1);d("}")}finally{c.delete(o)}};return p(t,0),e.join("")}function ct(t){let e=Object.create(null);if(t==null)return e;if(typeof t!="object"&&typeof t!="function")throw new TypeError("HTTP headers must be an object");if(k.isProxy(t))throw new TypeError("HTTP headers must not be a proxy");if(Object.getOwnPropertySymbols(t).length>0)throw new TypeError("HTTP headers must not contain symbol fields");let r=new Set;for(let n of Object.keys(t)){if(!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/u.test(n))throw new TypeError("HTTP header names must be valid tokens");let s=n.toLowerCase();if(r.has(s))throw new TypeError("HTTP headers contain a duplicate canonical name");r.add(s);let i=Object.getOwnPropertyDescriptor(t,n);if(!i||!Object.hasOwn(i,"value"))throw new TypeError("HTTP headers must contain own data properties");let c=i.value;if(c==null||["object","function","symbol"].includes(typeof c))throw new TypeError("HTTP header values must be scalar");e[n]=String(c)}return e}function ut(){return Object.assign(Object.create(null),{Accept:"application/json"})}function lt(t,e){if(!t)throw new Error(`HTTP redirect from ${e} missing Location`);let r=new URL(String(t),String(e));if(r.protocol!=="http:"&&r.protocol!=="https:")throw new Error(`HTTP redirect from ${e} used unsupported protocol ${r.protocol}`);return r.toString()}function ft(t,e){return new URL(String(t)).origin===new URL(String(e)).origin}var ce=new Map,Se=new WeakMap,Pe=1;function Z(t){if((typeof t!="object"||t===null)&&typeof t!="function")return`${typeof t}:${String(t)}`;let e=Se.get(t);return e||(e=Pe,Pe+=1,Se.set(t,e)),`reference:${e}`}var dt=new Set(["eth_blockNumber","eth_call","eth_chainId","eth_estimateGas","getHealth","minimumLedgerSlot","net_version","simulateTransaction","web3_clientVersion"]),pt=new Set(["allMids","l2Book","outcomeMeta","spotClearinghouseState","userFills","meta","metaAndAssetCtxs","perpDexs","candleSnapshot","fundingHistory","openOrders","frontendOpenOrders","clearinghouseState","spotMeta","validatorSummaries","delegatorSummary","delegations","delegatorRewards","delegatorHistory","maxBuilderFee"]);function Re(t){if(!t||typeof t!="object"||Array.isArray(t)||!Object.hasOwn(t,"jsonrpc")||!Object.hasOwn(t,"method")||t.jsonrpc!=="2.0")return!1;let e=typeof t.method=="string"?t.method:"";return e?dt.has(e)||/^get[A-Z0-9_]/u.test(e)||/^is[A-Z0-9_]/u.test(e)||/^eth_get[A-Z0-9_]/u.test(e):!1}function Ae(t,e){if(t==="GET"&&e==null)return!0;if(t!=="POST"||e==null)return!1;let r=e;if(typeof e=="string")try{r=JSON.parse(e)}catch{return!1}if(Array.isArray(r))return r.length>0&&r.every(Re);if(!r||typeof r!="object")return!1;if(Object.hasOwn(r,"jsonrpc")||Object.hasOwn(r,"method"))return Re(r);let n=Object.hasOwn(r,"type")?r.type:null;return typeof n=="string"&&pt.has(n)&&(!Object.hasOwn(r,"action")||r.action==null)&&(!Object.hasOwn(r,"signature")||r.signature==null)&&(!Object.hasOwn(r,"nonce")||r.nonce==null)}function ht(t,e,r,n={},s=null){let i=Ze("sha256"),c=(u,p)=>{let o=String(p);i.update(String(Buffer.byteLength(u,"utf8"))).update(":").update(u),i.update("=").update(String(Buffer.byteLength(o,"utf8"))).update(":").update(o).update(`
2
- `)};c("method",t),c("url",e),Object.keys(r||{}).map((u,p)=>({name:u.toLowerCase(),order:p,value:String(r[u])})).sort((u,p)=>u.name.localeCompare(p.name)||u.order-p.order).forEach((u,p)=>{c(`header-name-${p}`,u.name),c(`header-value-${p}`,u.value)}),c("body",s??"-");for(let u of["untrustedUrl","maxResponseBytes","sameOriginRedirectsOnly","redirectPolicy","maxRedirects","timeoutMs","retries","fetchImpl","realFetch","lookupFn","importUndici","validateResponse"])c(`context-${u}`,n[u]??"-");return i.digest("hex")}function mt(t,e){let r=Number(e);return Number.isFinite(r)&&r>0?Math.min(r*1e3,Te):Math.min(250*2**t,Te)+Math.floor(Math.random()*100)}var yt=t=>new Promise(e=>setTimeout(e,t));function $(t,e={}){let r=new Error(t);return r.retryable=!1,Object.assign(r,e),r}function ue(t,e,r){return $(`HTTP response from ${t} exceeded maxResponseBytes ${r} (${e})`,{oversize:!0})}function M(t){try{let e=t?.body?.cancel?.();e&&typeof e.then=="function"&&e.catch(()=>{})}catch{}}function wt(t){return t?t.byteLength??t.length??0:0}async function bt(t,e,{url:r,truncate:n=!1,onOversize:s}={}){if(e==null)return await t.text();let i=Number(t.headers?.get?.("content-length"));if(Number.isFinite(i)&&i>e&&(M(t),!n))throw ue(r,`content-length ${i}`,e);let c=t.body?.getReader?.();if(!c){let a=await t.text(),l=Buffer.byteLength(a,"utf8");if(l>e){if(!n)throw ue(r,`body ${l} bytes`,e);return Buffer.from(a,"utf8").subarray(0,e).toString("utf8")}return a}let d=[],u=0,p=!1;try{for(;;){let{value:a,done:l}=await c.read();if(l)break;if(a&&(d.push(Buffer.from(a)),u+=wt(a),u>e)){p=!0;break}}}finally{if(p)try{await c.cancel()}catch{}try{c.releaseLock?.()}catch{}}if(p&&(typeof s=="function"&&s(),!n))throw ue(r,`streamed ${u} bytes`,e);let o=Buffer.concat(d);return(p?o.subarray(0,e):o).toString("utf8")}function gt(t){if(!t)return null;try{return JSON.parse(t)}catch{return null}}async function Tt(t,{fetchImpl:e,method:r,headers:n,body:s,timeoutMs:i,lookupFn:c,realFetch:d,untrustedUrl:u=!1,maxResponseBytes:p=null,sameOriginRedirectsOnly:o=!1,importUndici:a,validateResponse:l,signal:h,redirectPolicy:m="follow",maxRedirects:R=X}){let w=null,O=e,C=c?{lookupFn:c}:{};if(u&&!d&&!ie(O))throw $(`HTTP refused ${t}: untrustedUrl requires a pin-capable fetchImpl (see markPinCapableFetch in egress-guard.mjs) or no fetchImpl override so Oracle can pin the connection itself`);let x=new AbortController,I=setTimeout(()=>x.abort(),i),z=h?Oe?Oe([h,x.signal]):h:x.signal,G=async(y,{status:S=null}={})=>{let P=await oe(y,C);if(!P.ok)throw $(S==null?`HTTP refused ${y}: ${P.error}`:`HTTP redirect to ${y} ${P.error}`,S==null?{}:{status:S});let j=new URL(y).hostname;if(d){if(w&&(await w.close(),w=null),!w)try{w=await se({requireUndici:!0,...a?{importUndici:a}:{}})}catch(f){throw $(S==null?`HTTP refused ${y}: ${f?.message||f}`:`HTTP redirect to ${y} refused: ${f?.message||f}`,S==null?{}:{status:S})}w.pin(j,P.addresses),O=w.fetch}else be(O,j,P.addresses);return P};try{let y=String(t),S=Object.assign(Object.create(null),n||{});u&&await G(y);for(let P=0;P<=R;P+=1){let j=Object.assign(Object.create(null),{method:r,headers:S,body:s,signal:z,redirect:"manual",dispatcher:void 0}),f=await O(y,j);if((m==="error"||R===0)&&f.status>=300&&f.status<400)throw M(f),$(`HTTP ${f.status} ${r} redirect refused`,{status:f.status,redirectRefused:!0});if(st.has(f.status)){let v=o===!0&&r==="POST"&&[307,308].includes(f.status)&&Ae(r,s);if(r!=="GET"&&r!=="HEAD"&&!v){M(f);let E=new Error(`HTTP ${f.status} ${r} ${y} redirected non-idempotent request`);throw E.status=f.status,E}if(P===R)throw M(f),$(`HTTP ${f.status} ${r} redirect budget exhausted`,{status:f.status,redirectRefused:!0});let me=f.headers?.get?.("location"),_;try{_=lt(me,y)}catch(E){throw M(f),E}let H=!ft(_,y);if(M(f),H&&r==="POST"){let E=new Error(`HTTP ${f.status} ${r} cross-origin redirect refused`);throw E.status=f.status,E}if(H&&o){let E=new Error(`HTTP ${f.status} ${r} cross-origin redirect refused`);throw E.status=f.status,E.retryable=!1,E}if(H&&(S=ut(S)),u)await G(_,{status:f.status});else if(H){let E=await oe(_,C);if(!E.ok){let g=new Error(`HTTP redirect from ${y} ${E.error}`);throw g.status=f.status,g.retryable=!1,g}d&&E.addresses?.length&&(w||(w=await se(a?{importUndici:a}:{})),w&&(w.pin(new URL(_).hostname,E.addresses),O=w.fetch))}y=_;continue}if(typeof l=="function")try{await l(f,{url:y})}catch(v){throw M(f),$(v?.message||String(v))}let A=await bt(f,p,{url:y,onOversize:()=>x.abort()}),J=gt(A);if(!f.ok){let v=new Error(`HTTP ${f.status} ${r} ${y}`);throw v.status=f.status,v.retryAfter=f.headers?.get?.("retry-after")??null,v.body=J??A.slice(0,300),v}return J??A}throw new Error(`HTTP redirect loop for ${t}`)}catch(y){if(x.signal.aborted&&!Y(h)){let S=y&&(typeof y=="object"||typeof y=="function")&&!k.isProxy(y)?y:null,P=S?Object.getOwnPropertyDescriptor(S,"oversize"):null;if(!(P&&Object.hasOwn(P,"value")&&P.value===!0))try{if(!S)throw new TypeError("unsafe rejection");Object.defineProperties(S,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}})}catch{let f=new Error("HTTP request timed out");throw Object.defineProperties(f,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}}),f}}throw y}finally{clearTimeout(I),w&&await w.close()}}async function xe(t,e={}){if(e!=null&&typeof e!="object"&&typeof e!="function")throw new TypeError("HTTP options must be an object");if(e!=null&&k.isProxy(e))throw new TypeError("HTTP options must not be a proxy");let r=new Set(["body","dedupe","fetchImpl","headers","importUndici","lookupFn","maxRedirects","maxResponseBytes","method","redirectPolicy","retries","sameOriginRedirectsOnly","signal","timeoutMs","untrustedUrl","validateResponse"]);if(e!=null){if(Object.getOwnPropertySymbols(e).length>0)throw new TypeError("HTTP options contain unknown fields");for(let g of Object.getOwnPropertyNames(e)){let b=Object.getOwnPropertyDescriptor(e,g);if(!(g==="toJSON"&&b&&Object.hasOwn(b,"value")&&b.value===void 0)){if(!r.has(g))throw new TypeError("HTTP options contain unknown fields");if(!b||!b.enumerable||!Object.hasOwn(b,"value"))throw new TypeError("HTTP options must contain enumerable own data properties")}}}let n=g=>{if(e==null||!Object.hasOwn(e,g))return;let b=Object.getOwnPropertyDescriptor(e,g);if(!b||!Object.hasOwn(b,"value"))throw new TypeError("HTTP options must contain own data properties");return b.value};if(typeof t!="string"||t.length===0||t.length>8192)throw new TypeError("HTTP URL must be a bounded string");let s=n("method");if(s!==void 0&&(typeof s!="string"||!/^[A-Za-z]+$/u.test(s)))throw new TypeError("HTTP method must be a string token");let i=n("timeoutMs");if(i!==void 0&&(!Number.isInteger(i)||i<1||i>12e4))throw new TypeError("HTTP timeoutMs must be a bounded integer");let c=n("retries");if(c!==void 0&&(!Number.isInteger(c)||c<0||c>10))throw new TypeError("HTTP retries must be a bounded integer");let d=n("redirectPolicy");if(d!==void 0&&d!=="follow"&&d!=="error")throw new TypeError('HTTP redirectPolicy must be "follow" or "error"');let u=n("maxRedirects");if(u!==void 0&&(!Number.isInteger(u)||u<0||u>X))throw new TypeError(`HTTP maxRedirects must be an integer from 0 through ${X}`);if(d==="error"&&u!==void 0&&u!==0)throw new TypeError('HTTP redirectPolicy "error" requires maxRedirects 0 when supplied');let p=d??"follow",o=p==="error"?0:u??X;for(let g of["dedupe","untrustedUrl","sameOriginRedirectsOnly"]){let b=n(g);if(b!==void 0&&typeof b!="boolean")throw new TypeError(`HTTP ${g} must be boolean`)}let a=n("maxResponseBytes");if(a!==void 0&&(!Number.isInteger(a)||a<1||a>64*1024*1024))throw new TypeError("HTTP maxResponseBytes must be a bounded integer");let l=n("signal");if(l!==void 0){if(k.isProxy(l)||!(l instanceof AbortSignal))throw new TypeError("HTTP signal must be a native AbortSignal");try{Y(l)}catch{throw new TypeError("HTTP signal must be a native AbortSignal")}}for(let g of["importUndici","lookupFn","validateResponse"]){let b=n(g);if(b!==void 0&&typeof b!="function")throw new TypeError(`HTTP ${g} must be a function`)}let h=n("fetchImpl"),m=h||globalThis.fetch;if(typeof m!="function")throw new Error("fetch unavailable \u2014 pass opts.fetchImpl");let R=i??12e3,w=(s||"GET").toUpperCase(),O=n("headers"),C=ct(O),x=Object.assign(Object.create(null),C);Object.keys(x).some(g=>g.toLowerCase()==="accept")||(x.Accept="application/json");let I=n("body");I!=null&&typeof I!="string"&&(Object.keys(x).find(b=>b.toLowerCase()==="content-type")||(x["Content-Type"]="application/json"),I=it(I));let z=c??Qe,G=n("lookupFn"),y=!h,S=n("untrustedUrl")===!0,P=n("sameOriginRedirectsOnly")===!0,j=n("importUndici"),f=n("validateResponse"),A=l,J=a??null,v=async()=>{let g;for(let b=0;b<=z;b++){A&&rt.call(A);try{return await Tt(t,{fetchImpl:m,method:w,headers:x,body:I,timeoutMs:R,lookupFn:G,realFetch:y,untrustedUrl:S,maxResponseBytes:J,sameOriginRedirectsOnly:P,importUndici:j,validateResponse:f,signal:A,redirectPolicy:p,maxRedirects:o})}catch(L){g=L;let F=te=>{if(!L||typeof L!="object"&&typeof L!="function"||k.isProxy(L))return;let V=Object.getOwnPropertyDescriptor(L,te);return V&&Object.hasOwn(V,"value")?V.value:void 0},ee=F("status"),Ge=F("oracleTimeout")===!0||F("name")==="AbortError"||F("name")==="TimeoutError"||Y(A),Je=new Set([408,425,429]),Ve=F("retryable")===!1?!1:ee!=null?Je.has(ee)||Xe.has(ee)&&ge.has(w):!Ge&&ge.has(w);if(b===z||!Ve)throw L;let ye=mt(b,F("retryAfter"));A?await new Promise((te,V)=>{let we,W=()=>{clearTimeout(we),Ee.call(A,"abort",W),V(ot(A)||new DOMException("Aborted","AbortError"))};if(Y(A)){W();return}we=setTimeout(()=>{Ee.call(A,"abort",W),te()},ye),nt.call(A,"abort",W,{once:!0}),Y(A)&&W()}):await yt(ye)}}throw g};if(!(n("dedupe")!==!1&&!A&&Ae(w,I)))return v();let _=ht(w,t,x,{untrustedUrl:S,maxResponseBytes:J,sameOriginRedirectsOnly:P,redirectPolicy:p,maxRedirects:o,timeoutMs:R,retries:z,fetchImpl:Z(m),realFetch:y,lookupFn:Z(G),importUndici:Z(j),validateResponse:Z(f)},I),H=ce.get(_);if(H)return H;let E=v().finally(()=>ce.delete(_));return ce.set(_,E),E}var ve={robinhood:{chainId:4663,name:"Robinhood Chain",rpcEnv:["RH_CHAIN_RPC"],evm:!0},ethereum:{chainId:1,name:"Ethereum",rpcEnv:["ETH_RPC_URL","ETHEREUM_RPC_URL","MAINNET_RPC_URL"],evm:!0},polygon:{chainId:137,name:"Polygon",rpcEnv:["POLYGON_RPC_URL","POLYGON_RPC"],evm:!0},arbitrum:{chainId:42161,name:"Arbitrum One",rpcEnv:["ARBITRUM_RPC_URL","ARB_RPC_URL"],evm:!0},base:{chainId:8453,name:"Base",rpcEnv:["BASE_RPC_URL"],evm:!0},hyperevm:{chainId:999,name:"HyperEVM",rpcEnv:["HYPEREVM_RPC_URL","HYPER_EVM_RPC"],evm:!0},bsc:{chainId:56,name:"BNB Smart Chain",rpcEnv:["BSC_RPC_URL","BNB_RPC_URL"],evm:!0},avalanche:{chainId:43114,name:"Avalanche C-Chain",rpcEnv:["AVALANCHE_RPC_URL","AVAX_RPC_URL"],evm:!0},optimism:{chainId:10,name:"OP Mainnet",rpcEnv:["OPTIMISM_RPC_URL","OP_RPC_URL"],evm:!0},abstract:{chainId:2741,name:"Abstract",rpcEnv:["ABSTRACT_RPC_URL","ABS_RPC_URL"],evm:!0},stable:{chainId:988,name:"Stable Mainnet",rpcEnv:["STABLE_RPC_URL","STABLE_RPC"],evm:!0}},Et=new Map(Object.values(ve).map(t=>[t.chainId,t]));function _e(t){return Et.get(Number(t))||null}function Ie(t,e=process.env){let r=_e(t);if(!r)return null;for(let n of r.rpcEnv){let s=(e[n]||"").trim();if(s)return s}return null}import{Interface as Ot,getAddress as tr}from"ethers";var rr=new Ot(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);var St={1:"https://ethereum.publicnode.com",137:"https://polygon-bor-rpc.publicnode.com",42161:"https://arbitrum-one-rpc.publicnode.com",8453:"https://base-rpc.publicnode.com",10:"https://optimism-rpc.publicnode.com",988:"https://rpc.stable.xyz",56:"https://bsc-rpc.publicnode.com",43114:"https://avalanche-c-chain-rpc.publicnode.com",999:"https://rpc.hyperliquid.xyz/evm",2741:"https://api.mainnet.abs.xyz",4663:"https://rpc.mainnet.chain.robinhood.com"};function Pt(t,{rpcUrl:e,env:r=process.env}={}){if(e)return e;let n=Ie(t,r);return n||St[Number(t)]||null}var Rt=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/;function At(t){let e=String(t||""),r=e.toLowerCase();if(e!==e.trim()||!/^[a-zA-Z0-9_]+$/.test(e)||!Rt.test(r))throw new Error(`evm-rpc: ${e} refused \u2014 @oracle-agent/oracle is prepare-only (read RPC only; no broadcast/sign)`);return r}var q=new Map,Ne=new Map;function xt(t){let e=new Error(t?.message||JSON.stringify(t));return e.code=t?.code,e}function vt(t){if(t?.error)throw xt(t.error);return t?.result}function _t(t,e,r){return`${t}
1
+ import{keccak_256 as fe}from"@noble/hashes/sha3.js";import{createHash as st}from"node:crypto";import{types as C}from"node:util";import{AsyncLocalStorage as Xe}from"node:async_hooks";var Ze=new Xe,Qe=["http","retry","shared"],et=512;function X(t){let e=Ze.getStore();if(!e||e.closed||!Qe.includes(t))return null;if(e.spans.length>=et)return e.droppedSpans++,null;let r={stage:t,startMs:e.now()-e.start,durationMs:null,outcome:"pending",status:null};return e.spans.push(r),(n,o=null)=>{e.closed||r.durationMs!==null||(r.durationMs=Math.max(0,e.now()-e.start-r.startMs),r.outcome=n==="succeeded"?"succeeded":"failed",r.status=Number.isInteger(o)&&o>=100&&o<=599?o:null)}}import L from"node:net";import tt from"node:dns";var rt=new Set(["localhost","metadata.google.internal","metadata.goog"]);function Z(t){let e=String(t).toLowerCase().split("%")[0];if((e.match(/::/g)||[]).length>1)return null;let r=s=>{if(!s)return[];let a=s.split(":"),l=a.at(-1);if(l?.includes(".")){let h=l.split(".").map(Number);if(h.length!==4||h.some(m=>!Number.isInteger(m)||m<0||m>255))return null;a.splice(a.length-1,1,(h[0]<<8|h[1]).toString(16),(h[2]<<8|h[3]).toString(16))}return a.some(h=>!/^[0-9a-f]{1,4}$/.test(h))?null:a.map(h=>Number.parseInt(h,16))},[n,o]=e.split("::"),i=r(n),c=r(o);if(!i||!c)return null;let d=e.includes("::"),u=8-i.length-c.length;if(!d&&u!==0||d&&u<1)return null;let p=[...i,...Array(Math.max(0,u)).fill(0),...c];return p.length!==8?null:Uint8Array.from(p.flatMap(s=>[s>>8,s&255]))}function ne(t,e,r){let n=Math.floor(r/8),o=r%8;for(let c=0;c<n;c+=1)if(t[c]!==e[c])return!1;if(!o)return!0;let i=255<<8-o;return(t[n]&i)===(e[n]&i)}function oe(t){if(L.isIPv4(t)){let e=t.split(".").map(Number);return!(e[0]===0||e[0]===10||e[0]===127||e[0]>=224||e[0]===100&&e[1]>=64&&e[1]<=127||e[0]===169&&e[1]===254||e[0]===172&&e[1]>=16&&e[1]<=31||e[0]===192&&(e[1]===0||e[1]===2||e[1]===168)||e[0]===192&&e[1]===88&&e[2]===99||e[0]===198&&(e[1]===18||e[1]===19||e[1]===51)||e[0]===203&&e[1]===0&&e[2]===113)}if(L.isIPv6(t)){let e=Z(t);if(!e)return!1;let r=Z("::ffff:0:0");return ne(e,r,96)?oe([...e.slice(12)].join(".")):ne(e,Z("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([o,i])=>ne(e,Z(o),i)):!1}return!1}function nt(t){let e;try{e=new URL(String(t))}catch{return{ok:!1,error:`not a valid URL: ${String(t).slice(0,120)}`}}if(e.protocol!=="http:"&&e.protocol!=="https:")return{ok:!1,error:`refused protocol ${e.protocol} (only http/https)`};let r=e.hostname.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,"");if(rt.has(r)||r.endsWith(".localhost")||r.endsWith(".internal"))return{ok:!1,error:`refused internal host ${r}`};let n=L.isIP(r);return n!==0&&!oe(r)?{ok:!1,error:`refused private address ${r}`}:{ok:!0,url:e,host:r,isLiteralIp:n!==0}}async function se(t,{lookupFn:e=tt.promises.lookup}={}){let r=nt(t);if(!r.ok)return r;if(r.isLiteralIp)return{ok:!0,url:r.url,addresses:[{address:r.host,family:L.isIPv6(r.host)?6:4}]};let n;try{n=await e(r.host,{all:!0,verbatim:!0})}catch{return{ok:!1,error:`refused: ${r.host} did not resolve`}}return!Array.isArray(n)||n.length===0||n.some(o=>!oe(o.address))?{ok:!1,error:`refused: ${r.host} resolves to a non-public address`}:{ok:!0,url:r.url,addresses:n}}async function ae({requireUndici:t=!1,importUndici:e=()=>import("undici")}={}){let r,n;try{let a=await e();r=a.Agent,n=a.fetch}catch(a){if(t)throw new Error(`egress-guard: untrustedUrl pinning requires the undici package, which failed to load: ${a?.message||a}`);return null}if(typeof r!="function"||typeof n!="function"){if(t)throw new Error("egress-guard: untrustedUrl pinning requires undici's Agent and fetch exports, which were not found on the imported module");return null}let o=a=>String(a).toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,""),i=new Map,c=a=>(Array.isArray(a)?a:[a]).map(l=>typeof l=="string"?{address:l}:l).filter(l=>l&&l.address).map(l=>({address:l.address,family:l.family||(L.isIPv6(l.address)?6:4)})),d=(a,l,h)=>{i.set(o(a),c(typeof l=="string"?[{address:l,family:h}]:l))},u=a=>{let l=o(a);if(L.isIP(l))return[{address:l,family:L.isIPv6(l)?6:4}];let h=i.get(l);if(!h||!h.length)throw new Error(`refused: unpinned host ${a} during pinned fetch`);return h},p=new r({connect:{lookup(a,l,h){let m;try{m=u(a)}catch(A){return h(A)}return l?.all?h(null,m):h(null,m[0].address,m[0].family)}}}),s=ot((a,l={})=>n(a,{...l,dispatcher:p}),d);return{dispatcher:p,fetch:s,pin:d,resolve:u,async close(){try{await p.destroy()}catch{}}}}var ie=Symbol.for("oracle.egressGuard.pinCapableFetch");function ot(t,e){if(typeof t!="function")throw new Error("markPinCapableFetch: fetchImpl must be a function");if(typeof e!="function")throw new Error("markPinCapableFetch: pin must be a function");return t[ie]=Object.freeze({pin:e}),t}function ce(t){return typeof t=="function"&&typeof t[ie]?.pin=="function"}function Ee(t,e,r){if(!ce(t))throw new Error("pinFetchToAddresses: fetchImpl is not pin-capable");t[ie].pin(e,r)}var at=new Set([408,425,429,500,502,503,504]),Se=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),it=2,Oe=4e3,ct=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"aborted")?.get,ut=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"reason")?.get,lt=AbortSignal.prototype.throwIfAborted,ft=EventTarget.prototype.addEventListener,Pe=EventTarget.prototype.removeEventListener,Ae=typeof AbortSignal.any=="function"?AbortSignal.any.bind(AbortSignal):null,Y=t=>t?ct.call(t):!1,dt=t=>t?ut.call(t):void 0,pt=new Set([301,302,303,307,308]),ee=3,sr=64*1024,k=Object.freeze({depth:32,nodes:1e4,fields:1e4,arrayLength:1e4,bytes:1024*1024});function T(t){return $(`HTTP JSON body refused: ${t}`)}function ht(t){return["isArgumentsObject","isArrayBuffer","isAnyArrayBuffer","isArrayBufferView","isBoxedPrimitive","isDataView","isDate","isExternal","isGeneratorObject","isKeyObject","isCryptoKey","isMap","isMapIterator","isModuleNamespaceObject","isNativeError","isPromise","isRegExp","isSet","isSetIterator","isTypedArray","isWeakMap","isWeakSet"].some(e=>typeof C[e]=="function"&&C[e](t))}function mt(t){let e=[],r=0,n=0,o=0,i=0,c=new WeakSet,d=s=>{if(r+=Buffer.byteLength(s,"utf8"),r>k.bytes)throw T("serialized byte limit exceeded");e.push(s)},u=s=>{if(Buffer.byteLength(s,"utf8")>k.bytes)throw T("serialized byte limit exceeded");return JSON.stringify(s)},p=(s,a)=>{if(n+=1,n>k.nodes)throw T("node limit exceeded");if(a>k.depth)throw T("depth limit exceeded");if(s===null){d("null");return}if(typeof s=="string"){d(u(s));return}if(typeof s=="boolean"){d(s?"true":"false");return}if(typeof s=="number"){if(!Number.isFinite(s))throw T("non-finite number");d(Object.is(s,-0)?"0":String(s));return}if(typeof s!="object")throw T("unsupported non-JSON value");if(C.isProxy(s))throw T("proxy value");if(ht(s))throw T("unsupported exotic object");if(c.has(s))throw T("cyclic value");c.add(s);try{if(Object.getOwnPropertySymbols(s).length>0)throw T("symbol-keyed fields are unsupported");if(Array.isArray(s)){let m=Object.getPrototypeOf(s),A=0;for(;m!==null;){if(C.isProxy(m))throw T("proxy array prototype");if(A+=1,A>k.depth)throw T("array prototype depth limit exceeded");m=Object.getPrototypeOf(m)}if(s.length>k.arrayLength)throw T("array length limit exceeded");for(let S=0;S<s.length;S+=1){let j=Object.getOwnPropertyDescriptor(s,String(S));if(!j||!Object.hasOwn(j,"value")||j.enumerable!==!0)throw T("array entries must be dense enumerable own data")}let g=0;for(let S in s){if(i+=1,i>k.fields)throw T("enumeration limit exceeded");if(Object.hasOwn(s,S)&&(g+=1,g>s.length))throw T("named array fields are unsupported")}if(g!==s.length)throw T("array entries must be dense enumerable own data");d("[");for(let S=0;S<s.length;S+=1)S&&d(","),p(Object.getOwnPropertyDescriptor(s,String(S)).value,a+1);d("]");return}let l=Object.getPrototypeOf(s);if(l!==Object.prototype&&l!==null)throw T("non-plain object");let h=[];for(let m in s){if(i+=1,i>k.fields)throw T("enumeration limit exceeded");if(!Object.hasOwn(s,m))continue;if(o+=1,o>k.fields)throw T("field limit exceeded");let A=Object.getOwnPropertyDescriptor(s,m);if(!A||!Object.hasOwn(A,"value")||A.enumerable!==!0)throw T("object fields must be enumerable own data");h.push([m,A.value])}d("{");for(let m=0;m<h.length;m+=1)m&&d(","),d(u(h[m][0])),d(":"),p(h[m][1],a+1);d("}")}finally{c.delete(s)}};return p(t,0),e.join("")}function yt(t){let e=Object.create(null);if(t==null)return e;if(typeof t!="object"&&typeof t!="function")throw new TypeError("HTTP headers must be an object");if(C.isProxy(t))throw new TypeError("HTTP headers must not be a proxy");if(Object.getOwnPropertySymbols(t).length>0)throw new TypeError("HTTP headers must not contain symbol fields");let r=new Set;for(let n of Object.keys(t)){if(!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/u.test(n))throw new TypeError("HTTP header names must be valid tokens");let o=n.toLowerCase();if(r.has(o))throw new TypeError("HTTP headers contain a duplicate canonical name");r.add(o);let i=Object.getOwnPropertyDescriptor(t,n);if(!i||!Object.hasOwn(i,"value"))throw new TypeError("HTTP headers must contain own data properties");let c=i.value;if(c==null||["object","function","symbol"].includes(typeof c))throw new TypeError("HTTP header values must be scalar");e[n]=String(c)}return e}function wt(){return Object.assign(Object.create(null),{Accept:"application/json"})}function bt(t,e){if(!t)throw new Error(`HTTP redirect from ${e} missing Location`);let r=new URL(String(t),String(e));if(r.protocol!=="http:"&&r.protocol!=="https:")throw new Error(`HTTP redirect from ${e} used unsupported protocol ${r.protocol}`);return r.toString()}function gt(t,e){return new URL(String(t)).origin===new URL(String(e)).origin}var ue=new Map,Re=new WeakMap,xe=1;function Q(t){if((typeof t!="object"||t===null)&&typeof t!="function")return`${typeof t}:${String(t)}`;let e=Re.get(t);return e||(e=xe,xe+=1,Re.set(t,e)),`reference:${e}`}var Tt=new Set(["eth_blockNumber","eth_call","eth_chainId","eth_estimateGas","getHealth","minimumLedgerSlot","net_version","simulateTransaction","web3_clientVersion"]),Et=new Set(["allMids","l2Book","outcomeMeta","spotClearinghouseState","userFills","meta","metaAndAssetCtxs","perpDexs","candleSnapshot","fundingHistory","openOrders","frontendOpenOrders","clearinghouseState","spotMeta","validatorSummaries","delegatorSummary","delegations","delegatorRewards","delegatorHistory","maxBuilderFee"]);function ve(t){if(!t||typeof t!="object"||Array.isArray(t)||!Object.hasOwn(t,"jsonrpc")||!Object.hasOwn(t,"method")||t.jsonrpc!=="2.0")return!1;let e=typeof t.method=="string"?t.method:"";return e?Tt.has(e)||/^get[A-Z0-9_]/u.test(e)||/^is[A-Z0-9_]/u.test(e)||/^eth_get[A-Z0-9_]/u.test(e):!1}function _e(t,e){if(t==="GET"&&e==null)return!0;if(t!=="POST"||e==null)return!1;let r=e;if(typeof e=="string")try{r=JSON.parse(e)}catch{return!1}if(Array.isArray(r))return r.length>0&&r.every(ve);if(!r||typeof r!="object")return!1;if(Object.hasOwn(r,"jsonrpc")||Object.hasOwn(r,"method"))return ve(r);let n=Object.hasOwn(r,"type")?r.type:null;return typeof n=="string"&&Et.has(n)&&(!Object.hasOwn(r,"action")||r.action==null)&&(!Object.hasOwn(r,"signature")||r.signature==null)&&(!Object.hasOwn(r,"nonce")||r.nonce==null)}function St(t,e,r,n={},o=null){let i=st("sha256"),c=(u,p)=>{let s=String(p);i.update(String(Buffer.byteLength(u,"utf8"))).update(":").update(u),i.update("=").update(String(Buffer.byteLength(s,"utf8"))).update(":").update(s).update(`
2
+ `)};c("method",t),c("url",e),Object.keys(r||{}).map((u,p)=>({name:u.toLowerCase(),order:p,value:String(r[u])})).sort((u,p)=>u.name.localeCompare(p.name)||u.order-p.order).forEach((u,p)=>{c(`header-name-${p}`,u.name),c(`header-value-${p}`,u.value)}),c("body",o??"-");for(let u of["untrustedUrl","maxResponseBytes","sameOriginRedirectsOnly","redirectPolicy","maxRedirects","timeoutMs","retries","fetchImpl","realFetch","lookupFn","importUndici","validateResponse"])c(`context-${u}`,n[u]??"-");return i.digest("hex")}function Ot(t,e){let r=Number(e);return Number.isFinite(r)&&r>0?Math.min(r*1e3,Oe):Math.min(250*2**t,Oe)+Math.floor(Math.random()*100)}var Pt=t=>new Promise(e=>setTimeout(e,t));function $(t,e={}){let r=new Error(t);return r.retryable=!1,Object.assign(r,e),r}function le(t,e,r){return $(`HTTP response from ${t} exceeded maxResponseBytes ${r} (${e})`,{oversize:!0})}function B(t){try{let e=t?.body?.cancel?.();e&&typeof e.then=="function"&&e.catch(()=>{})}catch{}}function At(t){return t?t.byteLength??t.length??0:0}async function Rt(t,e,{url:r,truncate:n=!1,onOversize:o}={}){if(e==null)return await t.text();let i=Number(t.headers?.get?.("content-length"));if(Number.isFinite(i)&&i>e&&(B(t),!n))throw le(r,`content-length ${i}`,e);let c=t.body?.getReader?.();if(!c){let a=await t.text(),l=Buffer.byteLength(a,"utf8");if(l>e){if(!n)throw le(r,`body ${l} bytes`,e);return Buffer.from(a,"utf8").subarray(0,e).toString("utf8")}return a}let d=[],u=0,p=!1;try{for(;;){let{value:a,done:l}=await c.read();if(l)break;if(a&&(d.push(Buffer.from(a)),u+=At(a),u>e)){p=!0;break}}}finally{if(p)try{await c.cancel()}catch{}try{c.releaseLock?.()}catch{}}if(p&&(typeof o=="function"&&o(),!n))throw le(r,`streamed ${u} bytes`,e);let s=Buffer.concat(d);return(p?s.subarray(0,e):s).toString("utf8")}function xt(t){if(!t)return null;try{return JSON.parse(t)}catch{return null}}async function vt(t,{fetchImpl:e,method:r,headers:n,body:o,timeoutMs:i,lookupFn:c,realFetch:d,untrustedUrl:u=!1,maxResponseBytes:p=null,sameOriginRedirectsOnly:s=!1,importUndici:a,validateResponse:l,signal:h,redirectPolicy:m="follow",maxRedirects:A=ee}){let g=null,S=e,j=c?{lookupFn:c}:{};if(u&&!d&&!ce(S))throw $(`HTTP refused ${t}: untrustedUrl requires a pin-capable fetchImpl (see markPinCapableFetch in egress-guard.mjs) or no fetchImpl override so Oracle can pin the connection itself`);let x=new AbortController,I=setTimeout(()=>x.abort(),i),z=h?Ae?Ae([h,x.signal]):h:x.signal,G=async(y,{status:O=null}={})=>{let P=await se(y,j);if(!P.ok)throw $(O==null?`HTTP refused ${y}: ${P.error}`:`HTTP redirect to ${y} ${P.error}`,O==null?{}:{status:O});let M=new URL(y).hostname;if(d){if(g&&(await g.close(),g=null),!g)try{g=await ae({requireUndici:!0,...a?{importUndici:a}:{}})}catch(f){throw $(O==null?`HTTP refused ${y}: ${f?.message||f}`:`HTTP redirect to ${y} refused: ${f?.message||f}`,O==null?{}:{status:O})}g.pin(M,P.addresses),S=g.fetch}else Ee(S,M,P.addresses);return P};try{let y=String(t),O=Object.assign(Object.create(null),n||{});u&&await G(y);for(let P=0;P<=A;P+=1){let M=Object.assign(Object.create(null),{method:r,headers:O,body:o,signal:z,redirect:"manual",dispatcher:void 0}),f=await S(y,M);if((m==="error"||A===0)&&f.status>=300&&f.status<400)throw B(f),$(`HTTP ${f.status} ${r} redirect refused`,{status:f.status,redirectRefused:!0});if(pt.has(f.status)){let v=s===!0&&r==="POST"&&[307,308].includes(f.status)&&_e(r,o);if(r!=="GET"&&r!=="HEAD"&&!v){B(f);let E=new Error(`HTTP ${f.status} ${r} ${y} redirected non-idempotent request`);throw E.status=f.status,E}if(P===A)throw B(f),$(`HTTP ${f.status} ${r} redirect budget exhausted`,{status:f.status,redirectRefused:!0});let ye=f.headers?.get?.("location"),_;try{_=bt(ye,y)}catch(E){throw B(f),E}let H=!gt(_,y);if(B(f),H&&r==="POST"){let E=new Error(`HTTP ${f.status} ${r} cross-origin redirect refused`);throw E.status=f.status,E}if(H&&s){let E=new Error(`HTTP ${f.status} ${r} cross-origin redirect refused`);throw E.status=f.status,E.retryable=!1,E}if(H&&(O=wt(O)),u)await G(_,{status:f.status});else if(H){let E=await se(_,j);if(!E.ok){let b=new Error(`HTTP redirect from ${y} ${E.error}`);throw b.status=f.status,b.retryable=!1,b}d&&E.addresses?.length&&(g||(g=await ae(a?{importUndici:a}:{})),g&&(g.pin(new URL(_).hostname,E.addresses),S=g.fetch))}y=_;continue}if(typeof l=="function")try{await l(f,{url:y})}catch(v){throw B(f),$(v?.message||String(v))}let R=await Rt(f,p,{url:y,onOversize:()=>x.abort()}),V=xt(R);if(!f.ok){let v=new Error(`HTTP ${f.status} ${r} ${y}`);throw v.status=f.status,v.retryAfter=f.headers?.get?.("retry-after")??null,v.body=V??R.slice(0,300),v}return V??R}throw new Error(`HTTP redirect loop for ${t}`)}catch(y){if(x.signal.aborted&&!Y(h)){let O=y&&(typeof y=="object"||typeof y=="function")&&!C.isProxy(y)?y:null,P=O?Object.getOwnPropertyDescriptor(O,"oversize"):null;if(!(P&&Object.hasOwn(P,"value")&&P.value===!0))try{if(!O)throw new TypeError("unsafe rejection");Object.defineProperties(O,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}})}catch{let f=new Error("HTTP request timed out");throw Object.defineProperties(f,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}}),f}}throw y}finally{clearTimeout(I),g&&await g.close()}}async function Ie(t,e={}){if(e!=null&&typeof e!="object"&&typeof e!="function")throw new TypeError("HTTP options must be an object");if(e!=null&&C.isProxy(e))throw new TypeError("HTTP options must not be a proxy");let r=new Set(["body","dedupe","fetchImpl","headers","importUndici","lookupFn","maxRedirects","maxResponseBytes","method","redirectPolicy","retries","sameOriginRedirectsOnly","signal","timeoutMs","untrustedUrl","validateResponse"]);if(e!=null){if(Object.getOwnPropertySymbols(e).length>0)throw new TypeError("HTTP options contain unknown fields");for(let b of Object.getOwnPropertyNames(e)){let w=Object.getOwnPropertyDescriptor(e,b);if(!(b==="toJSON"&&w&&Object.hasOwn(w,"value")&&w.value===void 0)){if(!r.has(b))throw new TypeError("HTTP options contain unknown fields");if(!w||!w.enumerable||!Object.hasOwn(w,"value"))throw new TypeError("HTTP options must contain enumerable own data properties")}}}let n=b=>{if(e==null||!Object.hasOwn(e,b))return;let w=Object.getOwnPropertyDescriptor(e,b);if(!w||!Object.hasOwn(w,"value"))throw new TypeError("HTTP options must contain own data properties");return w.value};if(typeof t!="string"||t.length===0||t.length>8192)throw new TypeError("HTTP URL must be a bounded string");let o=n("method");if(o!==void 0&&(typeof o!="string"||!/^[A-Za-z]+$/u.test(o)))throw new TypeError("HTTP method must be a string token");let i=n("timeoutMs");if(i!==void 0&&(!Number.isInteger(i)||i<1||i>12e4))throw new TypeError("HTTP timeoutMs must be a bounded integer");let c=n("retries");if(c!==void 0&&(!Number.isInteger(c)||c<0||c>10))throw new TypeError("HTTP retries must be a bounded integer");let d=n("redirectPolicy");if(d!==void 0&&d!=="follow"&&d!=="error")throw new TypeError('HTTP redirectPolicy must be "follow" or "error"');let u=n("maxRedirects");if(u!==void 0&&(!Number.isInteger(u)||u<0||u>ee))throw new TypeError(`HTTP maxRedirects must be an integer from 0 through ${ee}`);if(d==="error"&&u!==void 0&&u!==0)throw new TypeError('HTTP redirectPolicy "error" requires maxRedirects 0 when supplied');let p=d??"follow",s=p==="error"?0:u??ee;for(let b of["dedupe","untrustedUrl","sameOriginRedirectsOnly"]){let w=n(b);if(w!==void 0&&typeof w!="boolean")throw new TypeError(`HTTP ${b} must be boolean`)}let a=n("maxResponseBytes");if(a!==void 0&&(!Number.isInteger(a)||a<1||a>64*1024*1024))throw new TypeError("HTTP maxResponseBytes must be a bounded integer");let l=n("signal");if(l!==void 0){if(C.isProxy(l)||!(l instanceof AbortSignal))throw new TypeError("HTTP signal must be a native AbortSignal");try{Y(l)}catch{throw new TypeError("HTTP signal must be a native AbortSignal")}}for(let b of["importUndici","lookupFn","validateResponse"]){let w=n(b);if(w!==void 0&&typeof w!="function")throw new TypeError(`HTTP ${b} must be a function`)}let h=n("fetchImpl"),m=h||globalThis.fetch;if(typeof m!="function")throw new Error("fetch unavailable \u2014 pass opts.fetchImpl");let A=i??12e3,g=(o||"GET").toUpperCase(),S=n("headers"),j=yt(S),x=Object.assign(Object.create(null),j);Object.keys(x).some(b=>b.toLowerCase()==="accept")||(x.Accept="application/json");let I=n("body");I!=null&&typeof I!="string"&&(Object.keys(x).find(w=>w.toLowerCase()==="content-type")||(x["Content-Type"]="application/json"),I=mt(I));let z=c??it,G=n("lookupFn"),y=!h,O=n("untrustedUrl")===!0,P=n("sameOriginRedirectsOnly")===!0,M=n("importUndici"),f=n("validateResponse"),R=l,V=a??null,v=async()=>{let b;for(let w=0;w<=z;w++){R&&lt.call(R);let we=X("http");try{let N=await vt(t,{fetchImpl:m,method:g,headers:x,body:I,timeoutMs:A,lookupFn:G,realFetch:y,untrustedUrl:O,maxResponseBytes:V,sameOriginRedirectsOnly:P,importUndici:M,validateResponse:f,signal:R,redirectPolicy:p,maxRedirects:s});return we?.("succeeded"),N}catch(N){b=N;let F=re=>{if(!N||typeof N!="object"&&typeof N!="function"||C.isProxy(N))return;let J=Object.getOwnPropertyDescriptor(N,re);return J&&Object.hasOwn(J,"value")?J.value:void 0},K=F("status");we?.("failed",K);let We=F("oracleTimeout")===!0||F("name")==="AbortError"||F("name")==="TimeoutError"||Y(R),Ye=new Set([408,425,429]),qe=F("retryable")===!1?!1:K!=null?Ye.has(K)||at.has(K)&&Se.has(g):!We&&Se.has(g);if(w===z||!qe)throw N;let be=Ot(w,F("retryAfter")),Ke=X("retry"),ge=!1;try{R?await new Promise((re,J)=>{let Te,W=()=>{clearTimeout(Te),Pe.call(R,"abort",W),J(dt(R)||new DOMException("Aborted","AbortError"))};if(Y(R)){W();return}Te=setTimeout(()=>{Pe.call(R,"abort",W),re()},be),ft.call(R,"abort",W,{once:!0}),Y(R)&&W()}):await Pt(be),ge=!0}finally{Ke?.(ge?"succeeded":"failed")}}}throw b};if(!(n("dedupe")!==!1&&!R&&_e(g,I)))return v();let _=St(g,t,x,{untrustedUrl:O,maxResponseBytes:V,sameOriginRedirectsOnly:P,redirectPolicy:p,maxRedirects:s,timeoutMs:A,retries:z,fetchImpl:Q(m),realFetch:y,lookupFn:Q(G),importUndici:Q(M),validateResponse:Q(f)},I),H=ue.get(_);if(H){let b=X("shared");try{let w=await H;return b?.("succeeded"),w}catch(w){throw b?.("failed"),w}}let E=v().finally(()=>ue.delete(_));return ue.set(_,E),E}var Ne={robinhood:{chainId:4663,name:"Robinhood Chain",rpcEnv:["RH_CHAIN_RPC"],evm:!0},ethereum:{chainId:1,name:"Ethereum",rpcEnv:["ETH_RPC_URL","ETHEREUM_RPC_URL","MAINNET_RPC_URL"],evm:!0},polygon:{chainId:137,name:"Polygon",rpcEnv:["POLYGON_RPC_URL","POLYGON_RPC"],evm:!0},arbitrum:{chainId:42161,name:"Arbitrum One",rpcEnv:["ARBITRUM_RPC_URL","ARB_RPC_URL"],evm:!0},base:{chainId:8453,name:"Base",rpcEnv:["BASE_RPC_URL"],evm:!0},hyperevm:{chainId:999,name:"HyperEVM",rpcEnv:["HYPEREVM_RPC_URL","HYPER_EVM_RPC"],evm:!0},bsc:{chainId:56,name:"BNB Smart Chain",rpcEnv:["BSC_RPC_URL","BNB_RPC_URL"],evm:!0},avalanche:{chainId:43114,name:"Avalanche C-Chain",rpcEnv:["AVALANCHE_RPC_URL","AVAX_RPC_URL"],evm:!0},optimism:{chainId:10,name:"OP Mainnet",rpcEnv:["OPTIMISM_RPC_URL","OP_RPC_URL"],evm:!0},abstract:{chainId:2741,name:"Abstract",rpcEnv:["ABSTRACT_RPC_URL","ABS_RPC_URL"],evm:!0},stable:{chainId:988,name:"Stable Mainnet",rpcEnv:["STABLE_RPC_URL","STABLE_RPC"],evm:!0}},_t=new Map(Object.values(Ne).map(t=>[t.chainId,t]));function ke(t){return _t.get(Number(t))||null}function Ce(t,e=process.env){let r=ke(t);if(!r)return null;for(let n of r.rpcEnv){let o=(e[n]||"").trim();if(o)return o}return null}import{Interface as It,getAddress as dr}from"ethers";var pr=new It(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);var Nt={1:"https://ethereum.publicnode.com",137:"https://polygon-bor-rpc.publicnode.com",42161:"https://arbitrum-one-rpc.publicnode.com",8453:"https://base-rpc.publicnode.com",10:"https://optimism-rpc.publicnode.com",988:"https://rpc.stable.xyz",56:"https://bsc-rpc.publicnode.com",43114:"https://avalanche-c-chain-rpc.publicnode.com",999:"https://rpc.hyperliquid.xyz/evm",2741:"https://api.mainnet.abs.xyz",4663:"https://rpc.mainnet.chain.robinhood.com"};function kt(t,{rpcUrl:e,env:r=process.env}={}){if(e)return e;let n=Ce(t,r);return n||Nt[Number(t)]||null}var Ct=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/;function jt(t){let e=String(t||""),r=e.toLowerCase();if(e!==e.trim()||!/^[a-zA-Z0-9_]+$/.test(e)||!Ct.test(r))throw new Error(`evm-rpc: ${e} refused \u2014 @oracle-agent/oracle is prepare-only (read RPC only; no broadcast/sign)`);return r}var q=new Map,je=new Map;function Mt(t){let e=new Error(t?.message||JSON.stringify(t));return e.code=t?.code,e}function $t(t){if(t?.error)throw Mt(t.error);return t?.result}function Ht(t,e,r){return`${t}
3
3
  ${e}
4
- ${JSON.stringify(r??[])}`}async function It(t,e,r){return xe(t,{method:"POST",body:e,fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3,signal:r.signal})}async function ke(t,e,r=[],n={}){let s=String(e||""),i=At(s),c=Pt(t,n);if(!c)throw new Error(`No RPC URL for chainId ${t} (set env from chain registry rpcEnv or pass rpcUrl)`);if(i==="eth_chainid"&&n.cacheChainId!==!1){let o=Ne.get(c);if(o!=null)return o}let u=n.dedupe!==!1&&!n.signal?_t(c,s,r):null;if(u&&q.has(u))return q.get(u);let p=(async()=>{let o=await It(c,{jsonrpc:"2.0",id:1,method:e,params:r},n),a=vt(o);return i==="eth_chainid"&&typeof a=="string"&&Ne.set(c,a),a})();return u&&(q.set(u,p),p.finally(()=>{q.get(u)===p&&q.delete(u)}).catch(()=>{})),p}var de=999,fe=1,Nt=8453,Ce="0x1d9d87eBc14e71490bB87f1C39F65BDB979f3cb7",kt="0x4d5e4ed4D5e4A160Fa136853597cDc2eBBe66494",je="0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",Ct="0xC6d566A56A1aFf6508b41f6c90ff131615583BCD",jt=".80002105.reverse",pe=/^0x[a-fA-F0-9]{40}$/,$e=new TextEncoder,He=t=>"0x"+Buffer.from(t).toString("hex"),U=t=>He(le($e.encode(t))).slice(0,10),Le=t=>t.toLowerCase().replace(/^0x/,"").padStart(64,"0");function Q(t){let e=new Uint8Array(32);if(t)for(let r of String(t).split(".").reverse()){let n=le($e.encode(r)),s=new Uint8Array(64);s.set(e,0),s.set(n,32),e=le(s)}return He(e)}function he(t){if(!t||t==="0x"||/^0x0*$/.test(t))return"";try{let e=t.slice(2),r=parseInt(e.slice(0,64),16)*2,n=parseInt(e.slice(r,r+64),16);if(!Number.isFinite(n)||n<=0)return"";let s=e.slice(r+64,r+64+n*2);return Buffer.from(s,"hex").toString("utf8")}catch{return""}}async function D(t,e,r){try{return await ke(t,"eth_call",[{to:e,data:r},"latest"])}catch{return null}}async function $t(t){let e=await D(de,Ce,U("primaryName(address)")+Le(t)),r=he(e);return r?r.endsWith(".hl")?r:`${r}.hl`:null}async function Ht(t){let e=await D(de,kt,U("getName(address)")+Le(t)),r=he(e);return r?r.endsWith(".hype")?r:`${r}.hype`:null}async function Be(t,e,r){let n=await D(t,r,U("name(bytes32)")+e.slice(2));return he(n)||null}async function Lt(t){let e=Q(`${t.slice(2).toLowerCase()}.addr.reverse`),r=await D(fe,je,U("resolver(bytes32)")+e.slice(2));if(!r)return null;let n="0x"+r.slice(-40);return/^0x0+$/.test(n)?null:Be(fe,e,n)}async function Bt(t){let e=Q(t.slice(2).toLowerCase()+jt);return Be(Nt,e,Ct)}var Me=[{source:"hl",fn:$t},{source:"hype",fn:Ht},{source:"ens",fn:Lt},{source:"basename",fn:Bt}];async function Ue(t){if(!pe.test(String(t||"").trim()))return null;let e=String(t).trim();return(await Promise.all(Me.map(async({source:n,fn:s})=>{try{let i=await s(e);return i?{name:i,source:n,address:e}:null}catch{return null}}))).find(Boolean)||null}async function Mt(t){let e=Q(t),r=await D(de,Ce,U("ownerOf(uint256)")+e.slice(2));if(!r||r.length<66)return null;let n="0x"+r.slice(-40);return/^0x0+$/.test(n)?null:n}async function Ut(t,e,r){let n=Q(e),s=await D(t,r,U("resolver(bytes32)")+n.slice(2));if(!s)return null;let i="0x"+s.slice(-40);if(/^0x0+$/.test(i))return null;let c=await D(t,i,U("addr(bytes32)")+n.slice(2));if(!c)return null;let d="0x"+c.slice(-40);return/^0x0+$/.test(d)?null:d}async function De(t){let e=String(t||"").trim().toLowerCase();if(!e||!e.includes("."))return null;if(e.endsWith(".hl")){let r=await Mt(e);return r?{address:r,source:"hl",name:e}:null}if(e.endsWith(".eth")){let r=await Ut(fe,e,je);return r?{address:r,source:e.endsWith(".base.eth")?"basename":"ens",name:e}:null}return null}var Fe=Me.map(t=>t.source);var ze=`oracle resolve <name-or-address> [--json]
4
+ ${JSON.stringify(r??[])}`}async function Lt(t,e,r){return Ie(t,{method:"POST",body:e,fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3,signal:r.signal})}async function Me(t,e,r=[],n={}){let o=String(e||""),i=jt(o),c=kt(t,n);if(!c)throw new Error(`No RPC URL for chainId ${t} (set env from chain registry rpcEnv or pass rpcUrl)`);if(i==="eth_chainid"&&n.cacheChainId!==!1){let s=je.get(c);if(s!=null)return s}let u=n.dedupe!==!1&&!n.signal?Ht(c,o,r):null;if(u&&q.has(u))return q.get(u);let p=(async()=>{let s=await Lt(c,{jsonrpc:"2.0",id:1,method:e,params:r},n),a=$t(s);return i==="eth_chainid"&&typeof a=="string"&&je.set(c,a),a})();return u&&(q.set(u,p),p.finally(()=>{q.get(u)===p&&q.delete(u)}).catch(()=>{})),p}var pe=999,de=1,Bt=8453,$e="0x1d9d87eBc14e71490bB87f1C39F65BDB979f3cb7",Ut="0x4d5e4ed4D5e4A160Fa136853597cDc2eBBe66494",He="0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",Dt="0xC6d566A56A1aFf6508b41f6c90ff131615583BCD",Ft=".80002105.reverse",he=/^0x[a-fA-F0-9]{40}$/,Le=new TextEncoder,Be=t=>"0x"+Buffer.from(t).toString("hex"),U=t=>Be(fe(Le.encode(t))).slice(0,10),Ue=t=>t.toLowerCase().replace(/^0x/,"").padStart(64,"0");function te(t){let e=new Uint8Array(32);if(t)for(let r of String(t).split(".").reverse()){let n=fe(Le.encode(r)),o=new Uint8Array(64);o.set(e,0),o.set(n,32),e=fe(o)}return Be(e)}function me(t){if(!t||t==="0x"||/^0x0*$/.test(t))return"";try{let e=t.slice(2),r=parseInt(e.slice(0,64),16)*2,n=parseInt(e.slice(r,r+64),16);if(!Number.isFinite(n)||n<=0)return"";let o=e.slice(r+64,r+64+n*2);return Buffer.from(o,"hex").toString("utf8")}catch{return""}}async function D(t,e,r){try{return await Me(t,"eth_call",[{to:e,data:r},"latest"])}catch{return null}}async function zt(t){let e=await D(pe,$e,U("primaryName(address)")+Ue(t)),r=me(e);return r?r.endsWith(".hl")?r:`${r}.hl`:null}async function Gt(t){let e=await D(pe,Ut,U("getName(address)")+Ue(t)),r=me(e);return r?r.endsWith(".hype")?r:`${r}.hype`:null}async function De(t,e,r){let n=await D(t,r,U("name(bytes32)")+e.slice(2));return me(n)||null}async function Vt(t){let e=te(`${t.slice(2).toLowerCase()}.addr.reverse`),r=await D(de,He,U("resolver(bytes32)")+e.slice(2));if(!r)return null;let n="0x"+r.slice(-40);return/^0x0+$/.test(n)?null:De(de,e,n)}async function Jt(t){let e=te(t.slice(2).toLowerCase()+Ft);return De(Bt,e,Dt)}var Fe=[{source:"hl",fn:zt},{source:"hype",fn:Gt},{source:"ens",fn:Vt},{source:"basename",fn:Jt}];async function ze(t){if(!he.test(String(t||"").trim()))return null;let e=String(t).trim();return(await Promise.all(Fe.map(async({source:n,fn:o})=>{try{let i=await o(e);return i?{name:i,source:n,address:e}:null}catch{return null}}))).find(Boolean)||null}async function Wt(t){let e=te(t),r=await D(pe,$e,U("ownerOf(uint256)")+e.slice(2));if(!r||r.length<66)return null;let n="0x"+r.slice(-40);return/^0x0+$/.test(n)?null:n}async function Yt(t,e,r){let n=te(e),o=await D(t,r,U("resolver(bytes32)")+n.slice(2));if(!o)return null;let i="0x"+o.slice(-40);if(/^0x0+$/.test(i))return null;let c=await D(t,i,U("addr(bytes32)")+n.slice(2));if(!c)return null;let d="0x"+c.slice(-40);return/^0x0+$/.test(d)?null:d}async function Ge(t){let e=String(t||"").trim().toLowerCase();if(!e||!e.includes("."))return null;if(e.endsWith(".hl")){let r=await Wt(e);return r?{address:r,source:"hl",name:e}:null}if(e.endsWith(".eth")){let r=await Yt(de,e,He);return r?{address:r,source:e.endsWith(".base.eth")?"basename":"ens",name:e}:null}return null}var Ve=Fe.map(t=>t.source);var Je=`oracle resolve <name-or-address> [--json]
5
5
 
6
6
  oracle resolve demi.hl
7
7
  oracle resolve vitalik.eth
@@ -10,16 +10,16 @@ ${JSON.stringify(r??[])}`}async function It(t,e,r){return xe(t,{method:"POST",bo
10
10
  Reads on-chain name records. No API key: HL Names publishes a paid REST API,
11
11
  but the contract answers primaryName(address) for free.
12
12
 
13
- Sources, in priority order: ${Fe.join(", ")}.`;async function Dt(t=[]){let e=t.filter(s=>s!=="--json"),r=t.includes("--json"),n=(e[0]||"").trim();if(!n||n==="--help"||n==="-h")return process.stdout.write(ze+`
14
- `),n?0:1;try{if(pe.test(n)){let i=await Ue(n);return r?(process.stdout.write(JSON.stringify({address:n,name:i?.name??null,source:i?.source??null})+`
13
+ Sources, in priority order: ${Ve.join(", ")}.`;async function qt(t=[]){let e=t.filter(o=>o!=="--json"),r=t.includes("--json"),n=(e[0]||"").trim();if(!n||n==="--help"||n==="-h")return process.stdout.write(Je+`
14
+ `),n?0:1;try{if(he.test(n)){let i=await ze(n);return r?(process.stdout.write(JSON.stringify({address:n,name:i?.name??null,source:i?.source??null})+`
15
15
  `),0):i?(process.stdout.write(`${n}
16
16
  ${i.name} [${i.source}]
17
17
  `),0):(process.stdout.write(`${n}
18
18
  no name record found
19
- `),0)}let s=await De(n);return r?(process.stdout.write(JSON.stringify({name:n,address:s?.address??null,source:s?.source??null})+`
20
- `),0):s?(process.stdout.write(`${n}
21
- ${s.address} [${s.source}]
19
+ `),0)}let o=await Ge(n);return r?(process.stdout.write(JSON.stringify({name:n,address:o?.address??null,source:o?.source??null})+`
20
+ `),0):o?(process.stdout.write(`${n}
21
+ ${o.address} [${o.source}]
22
22
  `),0):(process.stdout.write(`${n}
23
23
  unresolved (no owner record)
24
- `),0)}catch(s){return process.stderr.write(`resolve failed: ${s?.message||s}
25
- `),1}}var cr={name:"resolve",summary:"resolve .hl/.hype/.eth names to addresses and back",usage:ze,async run(t){return Dt(t.argv||[])}};export{cr as default};
24
+ `),0)}catch(o){return process.stderr.write(`resolve failed: ${o?.message||o}
25
+ `),1}}var gr={name:"resolve",summary:"resolve .hl/.hype/.eth names to addresses and back",usage:Je,async run(t){return qt(t.argv||[])}};export{gr as default};