@oracle-agent/oracle 0.35.31 → 0.35.32

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 (53) hide show
  1. package/README.md +19 -1
  2. package/dist/agent-lifecycle.mjs +3 -3
  3. package/dist/agent-sessions.mjs +7 -7
  4. package/dist/assets/skills/oracle-desk-product/SKILL.md +1 -1
  5. package/dist/bin/desk-server.mjs +37 -37
  6. package/dist/bin/oracle-data-mcp.mjs +17 -17
  7. package/dist/bin/oracle-gateway.mjs +16 -16
  8. package/dist/bin/oracle-investigate.mjs +11 -0
  9. package/dist/bin/oracle-launch-radar-shadow.mjs +6 -6
  10. package/dist/bin/oracle-mev-arb-shadow.mjs +6 -6
  11. package/dist/bin/oracle-mev-shadow.mjs +6 -6
  12. package/dist/bin/oracle-public-server.mjs +5 -5
  13. package/dist/bin/oracle-route.mjs +22 -22
  14. package/dist/bin/oracle-scan.mjs +15 -15
  15. package/dist/cli/commands/agent-session.mjs +7 -7
  16. package/dist/cli/commands/chat.mjs +197 -197
  17. package/dist/cli/commands/context.mjs +6 -6
  18. package/dist/cli/commands/doctor.mjs +9 -9
  19. package/dist/cli/commands/eval.mjs +50 -50
  20. package/dist/cli/commands/farm.mjs +22 -22
  21. package/dist/cli/commands/follow.mjs +16 -16
  22. package/dist/cli/commands/lifecycle.mjs +6 -6
  23. package/dist/cli/commands/model.mjs +201 -201
  24. package/dist/cli/commands/quickstart.mjs +7 -7
  25. package/dist/cli/commands/receipt.mjs +12 -12
  26. package/dist/cli/commands/resolve.mjs +12 -12
  27. package/dist/cli/commands/sign.mjs +15 -13
  28. package/dist/cli/commands/signer.mjs +19 -19
  29. package/dist/cli/commands/snipe.mjs +11 -11
  30. package/dist/cli/commands/strategy.mjs +5 -5
  31. package/dist/cli/commands/swap.mjs +31 -31
  32. package/dist/cli/commands/venues.mjs +2 -2
  33. package/dist/context-graph.mjs +3 -3
  34. package/dist/data/desk-data.mjs +35 -35
  35. package/dist/data/names.mjs +3 -3
  36. package/dist/data/providers/farming.mjs +2 -2
  37. package/dist/data/providers/lp-destination-discovery.mjs +4 -4
  38. package/dist/index.mjs +49 -49
  39. package/dist/investigator/index.mjs +2 -0
  40. package/dist/launch-radar/index.mjs +5 -5
  41. package/dist/local-signer/anvil-attestation-worker.mjs +1 -1
  42. package/dist/local-signer/index.mjs +3 -3
  43. package/dist/local-signer/runtime.mjs +19 -19
  44. package/dist/nft/universal-mint-router.mjs +4 -4
  45. package/dist/router/index.mjs +3 -3
  46. package/dist/router/prepare-bridge.mjs +2 -2
  47. package/dist/scanner/index.mjs +4 -4
  48. package/dist/strategy/index.mjs +3 -3
  49. package/dist/tui/standalone-client.mjs +33 -33
  50. package/package.json +3 -1
  51. package/public/eval-report.json +2 -2
  52. package/public/oracle-splash/index.html +2 -2
  53. package/server.json +2 -2
@@ -1,15 +1,15 @@
1
- import{wordlists as Be}from"ethers";var Ke=new Set(["privatekey","privkey","secretkey","seedphrase","seed","mnemonic","passphrase","password","keystore","keymaterial","wif","xprv","xpriv","bearer","authorization","signature","apikey","credential"]),Ve=[/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/,/\bxprv[0-9A-Za-z]{50,}\b/],Ge=new Set([12,15,18,21,24]);function We(e){let t=String(e).trim().toLowerCase().split(/\s+/).filter(Boolean);return Ge.has(t.length)&&t.every(n=>Be.en.getWordIndex(n)>=0)}var qe=/^\s*(?:0x)?[0-9a-fA-F]{64}\s*$/,Ye=/(hash|digest|root|salt|nonce|proof|commitment|sig|id)(?:e?s)?$/i,Je=new Set(["calldata","data","publickey","pubkey","message","payload","input","extradata"]);function Xe(e){let t=he(e);return Je.has(t)||Ye.test(t)}var F=class extends Error{constructor(t){super(`action receipt refused: secret-bearing field at ${t}`),this.name="ActionReceiptSecretError",this.code="ACTION_RECEIPT_SECRET"}};function he(e){return String(e).replace(/[^a-z0-9]/gi,"").toLowerCase()}function Ze(e){let t=he(e);return[...Ke].some(n=>t.includes(n))}function Qe(e,t,n){if(typeof t=="string"){if(Ve.some(o=>o.test(t))||We(t))throw new F(n);if(qe.test(t)&&!Xe(e))throw new F(n)}}function Y(e,t="$",n=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string")return Qe(n,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((r,s)=>Y(r,`${t}[${s}]`,n));if(typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`action receipt: JSON-like value required at ${t}`);let o={};for(let r of Object.keys(e).sort()){let s=`${t}.${r}`;if(Ze(r))throw new F(s);e[r]!==void 0&&(o[r]=Y(e[r],s,r))}return o}function me(e){return Y(e)}var Jt=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),Xt=Object.freeze(["read","simulate"]);var Zt=1440*60;var T=class extends Error{constructor(t,n){super(`secret material must never appear in a public API object (at ${t}, rule: ${n})`),this.name="SecretLeakError",this.path=t,this.rule=n}},et=/(private[_-]?key|secret|bearer|keystore|mnemonic|seed[_-]?phrase|passphrase|password|api[_-]?key|access[_-]?token|auth[_-]?token|session[_-]?token|signer[_-]?url|signature)/i,tt=Object.freeze(["privkey","wif","xprv","seed"]);function J(e){let t=String(e),n=t.toLowerCase().replace(/[\s._-]+/g,"");return et.test(t)||tt.includes(n)}var ye=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}]),be=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"]);function nt(e){return e.replace(/"([A-Za-z0-9_-]+)"\s*:\s*"(?:0x)?([0-9a-fA-F]{64})"/g,(t,n)=>be.includes(String(n).toLowerCase().replace(/[_-]/g,""))?`"${n}":"<hex64>"`:t)}function ge(e){let t;try{t=JSON.stringify(e)}catch(r){throw new T("$",`unserializable-payload: ${String(r?.message||r)}`)}if(t===void 0)return"null";let n=nt(t);for(let{rule:r,re:s}of ye)if(s.test(n))throw new T("$<serialized>",r);if(/(?:^|[^0-9a-fA-Fx])0x[0-9a-fA-F]{64}(?![0-9a-fA-F])/.test(n))throw new T("$<serialized>","raw-32-byte-hex-embedded");return JSON.parse(t,(r,s)=>{if(r&&J(r))throw new T(`$<serialized>.${r}`,"forbidden-key-name");return s}),t}function O(e,t="$",n=new Set,o=""){if(e==null)return e;if(typeof e=="string"){let r=be.includes(String(o).toLowerCase().replace(/[_-]/g,""));for(let{rule:s,re:a}of ye)if(!(r&&s.startsWith("raw-32-byte-hex"))&&a.test(e))throw new T(t,s);return e}if(typeof e!="object"||n.has(e)||(n.add(e),ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e;if(e instanceof Map){for(let[r,s]of e.entries()){if(typeof r=="string"&&J(r))throw new T(`${t}[${JSON.stringify(r)}]`,"forbidden-key-name");O(r,`${t}[key]`,n),O(s,`${t}[${String(r)}]`,n)}return e}if(e instanceof Set){let r=0;for(let s of e.values())O(s,`${t}[${r++}]`,n);return e}if(Array.isArray(e))return e.forEach((r,s)=>O(r,`${t}[${s}]`,n)),e;for(let[r,s]of Object.entries(e)){if(J(r))throw new T(`${t}.${r}`,"forbidden-key-name");O(s,`${t}.${r}`,n,r)}return e}var rt=/[\u0000-\u001f\u007f]/;function X(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 Z(e,t="control input"){try{O(e,t),ge(e)}catch(n){throw new TypeError(`${t} contains secret or custody material: ${n.message}`)}return e}function j(e,{required:t=[],optional:n=[]}={},o="object"){X(e,o);let r=new Set([...t,...n]),s=Object.keys(e).filter(a=>!r.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 Q(e,t,n=200,{lower:o=!1}={}){if(typeof e!="string"||!e.trim()||e.length>n||rt.test(e))throw new TypeError(`${t} must be non-empty control-free text up to ${n} characters`);let r=e.trim();return o?r.toLowerCase():r}function z(e,t,n=80){let o=Q(e,t,n,{lower:!0});if(!/^[a-z0-9][a-z0-9._:-]*$/.test(o))throw new TypeError(`${t} must be a lowercase identifier`);return o}function G(e,t,{positive:n=!1}={}){if(!Number.isSafeInteger(e)||e<0||n&&e===0)throw new TypeError(`${t} must be a ${n?"positive":"non-negative"} safe integer`);return e}function I(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))I(t);Object.freeze(e)}return e}var ot=Object.freeze(["confirmations","finalizedTag","checkpoint"]),k=Object.freeze({UNKNOWN:"UNKNOWN",INCLUDED:"INCLUDED",FINAL:"FINAL"}),st=Object.freeze(["LIVE","STALE","UNKNOWN","UNAVAILABLE"]);function we({family:e,chainId:t},n="chain"){let o=z(e,`${n}.family`,40),r;if(o==="evm"){if(typeof t=="number")r=String(G(t,`${n}.chainId`,{positive:!0}));else if(r=Q(t,`${n}.chainId`,40),!/^[1-9][0-9]*$/.test(r))throw new TypeError(`${n}.chainId must be a positive decimal EVM chain id`)}else r=z(t,`${n}.chainId`,80);return{family:o,chainId:r}}function it(e,t="chain"){return j(e,{required:["family","chainId"]},t),I(we(e,t))}function Ee(e,t="finality rule"){Z(e,t),X(e,t);let n=e.rule;if(!ot.includes(n))throw new TypeError(`${t}.rule must be confirmations, finalizedTag, or checkpoint`);let o=n==="confirmations"?"confirmations":n;j(e,{required:["family","chainId","rule",o]},t);let r=we(e,t);return n==="confirmations"?{...r,rule:n,confirmations:G(e.confirmations,`${t}.confirmations`,{positive:!0})}:{...r,rule:n,[o]:z(e[o],`${t}.${o}`,80)}}function ee(e){if(!Array.isArray(e))throw new TypeError("finality policy rules must be an array");let t=e.map((o,r)=>Ee(o,`finality policy rule ${r}`)),n=new Set;for(let o of t){let r=`${o.family}\0${o.chainId}`;if(n.has(r))throw new TypeError(`duplicate finality rule for ${o.family}:${o.chainId}`);n.add(r)}return I({policyVersion:1,rules:t})}function at(e){if(j(e,{required:["policyVersion","rules"]},"finality policy"),e.policyVersion!==1||!Array.isArray(e.rules))throw new TypeError("unsupported finality policy");return ee(e.rules)}function Ae(e,t){let n=it(t,"finality query"),r=at(e).rules.find(s=>s.family===n.family&&s.chainId===n.chainId);return r?I({status:"KNOWN",...n,rule:r}):I({status:k.UNKNOWN,reason:"MISSING_FINALITY_RULE",...n,rule:null})}function ct(e,t){if(e==null)return null;Z(e,"finality evidence");let n=t.rule==="confirmations"?"confirmations":t.rule;if(j(e,{required:["status"],optional:[n]},"finality evidence"),!st.includes(e.status))throw new TypeError("finality evidence.status is unknown");let o={status:e.status};return e[n]!=null&&(o[n]=t.rule==="confirmations"?G(e.confirmations,"finality evidence.confirmations",{positive:!0}):z(e[n],`finality evidence.${n}`,80)),o}function Se(e,t){if(!e||e.status===k.UNKNOWN||e.rule==null)return I({status:k.UNKNOWN,final:!1,reason:"MISSING_FINALITY_RULE"});let n=Ee(e.rule??e,"resolved finality rule"),o=ct(t,n);if(o==null)return I({status:k.UNKNOWN,final:!1,reason:"MISSING_FINALITY_EVIDENCE"});if(o.status!=="LIVE")return I({status:k.UNKNOWN,final:!1,reason:`${o.status}_EVIDENCE`});let r=!1;return n.rule==="confirmations"?r=o.confirmations!=null&&o.confirmations>=n.confirmations:n.rule==="finalizedTag"?r=o.finalizedTag===n.finalizedTag:r=o.checkpoint===n.checkpoint,I({status:r?k.FINAL:k.INCLUDED,final:r,reason:r?"PINNED_RULE_SATISFIED":"PINNED_RULE_NOT_SATISFIED",rule:n})}var lt=1,gn=Object.freeze(["SUCCESS","FAIL","UNKNOWN"]),b=(...e)=>e.find(t=>t!=null),D=e=>!!e&&typeof e=="object"&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype;function ft(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 xe(e){return typeof e=="string"&&["FAIL","FAILED","FAILURE","ORPHAN","ORPHANED","REVERTED"].includes(e.trim().toUpperCase())}function ne(e){return e==null?e:Array.isArray(e)?e.map(ne):D(e)?Object.fromEntries(Object.keys(e).sort().map(t=>[t,ne(e[t])])):String(e)}function ut(e,t,n,o){let r=b(e.finalityEvidence,o?.finality,e.evidence),s=b(e.finalityPolicy,e.policy);try{return s==null&&D(e.finalityRule)&&(s=ee([{family:t,chainId:n,...e.finalityRule}])),s==null||t==null||n==null?{status:"UNKNOWN",final:!1,reason:"MISSING_FINALITY_RULE"}:Se(Ae(s,{family:t,chainId:n}),r)}catch{return{status:"UNKNOWN",final:!1,reason:"MALFORMED_FINALITY_EVIDENCE"}}}function A(e,t,n){n!=null&&(e[t]=n)}function dt(e){return e==null?null:String(e).trim().toLowerCase()}function te(...e){let t=e.map(dt).filter(Boolean);return t.length<=1||t.every(n=>n===t[0])}function W(e={}){if(!D(e))throw new TypeError("verified receipt: input object required");let t=me(e),n=b(t.actionReceipt,t.receipt),o=D(n)?n:t,r=b(t.observation,t.chainObservation,t.observedReceipt),s=D(r),a=b(t.txHash,o.txHash,o.transactionHash,r?.txHash,r?.transactionHash),p=b(t.family,o.family,o.chain?.family,r?.family,r?.chain?.family),d=b(t.chainId,o.chainId,o.chain?.chainId,r?.chainId,r?.chain?.chainId),f=!te(t.txHash,o.txHash,o.transactionHash,r?.txHash,r?.transactionHash)||!te(t.family,o.family,o.chain?.family,r?.family,r?.chain?.family)||!te(t.chainId,o.chainId,o.chain?.chainId,r?.chainId,r?.chain?.chainId),u=ut(t,p,d,s&&!f?r:null),i=ft(b(r?.receiptStatus,r?.executionStatus,r?.status)),c=b(t.reconciliationStatus,t.reconciliation?.status,r?.reconciliationStatus),l=b(t.finalityState,t.finalityEvidence?.status,t.evidence?.status,r?.finalityState),g="UNKNOWN";xe(c)||!f&&(s&&i==="FAIL"||xe(l))?g="FAIL":!f&&a&&s&&i==="SUCCESS"&&["INCLUDED","FINAL"].includes(u.status)&&(g="SUCCESS");let h={verifiedReceiptVersion:lt,status:g};f&&(h.reason="REFERENCE_MISMATCH"),A(h,"txHash",a),A(h,"chain",b(t.chain,o.chain,r?.chain)),A(h,"family",p),A(h,"chainId",d),A(h,"block",b(r?.block,t.block)),A(h,"blockState",b(r?.blockState,r?.inclusionState)),h.finalityState=u.status,A(h,"confirmations",b(r?.confirmations,r?.finality?.confirmations,t.finalityEvidence?.confirmations,t.evidence?.confirmations)),A(h,"observedAt",b(r?.observedAt,t.observedAt)),A(h,"route",b(t.route,o.route)),A(h,"prepareHash",b(t.prepareHash,o.prepareHash)),A(h,"policyOutcome",b(t.policyOutcome,o.policyOutcome,o.policyChecks));let y=b(t.balanceChanges,r?.balanceChanges,r?.balances,o.balanceChanges,o.balances);return y!=null&&(h.balanceChanges=ne(y)),A(h,"createdAt",b(t.createdAt,o.createdAt)),A(h,"submittedAt",b(t.submittedAt,o.submittedAt)),A(h,"finalizedAt",b(t.finalizedAt,r?.finalizedAt)),A(h,"timestamps",b(t.timestamps,o.timestamps,r?.timestamps)),I(h)}import{createHash as Ne}from"node:crypto";import L from"node:net";import pt from"node:dns";var ht=new Set(["localhost","metadata.google.internal","metadata.goog"]);function q(e){let t=String(e).toLowerCase().split("%")[0];if((t.match(/::/g)||[]).length>1)return null;let n=u=>{if(!u)return[];let i=u.split(":"),c=i.at(-1);if(c?.includes(".")){let l=c.split(".").map(Number);if(l.length!==4||l.some(g=>!Number.isInteger(g)||g<0||g>255))return null;i.splice(i.length-1,1,(l[0]<<8|l[1]).toString(16),(l[2]<<8|l[3]).toString(16))}return i.some(l=>!/^[0-9a-f]{1,4}$/.test(l))?null:i.map(l=>Number.parseInt(l,16))},[o,r]=t.split("::"),s=n(o),a=n(r);if(!s||!a)return null;let p=t.includes("::"),d=8-s.length-a.length;if(!p&&d!==0||p&&d<1)return null;let f=[...s,...Array(Math.max(0,d)).fill(0),...a];return f.length!==8?null:Uint8Array.from(f.flatMap(u=>[u>>8,u&255]))}function re(e,t,n){let o=Math.floor(n/8),r=n%8;for(let a=0;a<o;a+=1)if(e[a]!==t[a])return!1;if(!r)return!0;let s=255<<8-r;return(e[o]&s)===(t[o]&s)}function oe(e){if(L.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(L.isIPv6(e)){let t=q(e);if(!t)return!1;let n=q("::ffff:0:0");return re(t,n,96)?oe([...t.slice(12)].join(".")):re(t,q("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([r,s])=>re(t,q(r),s)):!1}return!1}function mt(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 n=t.hostname.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,"");if(ht.has(n)||n.endsWith(".localhost")||n.endsWith(".internal"))return{ok:!1,error:`refused internal host ${n}`};let o=L.isIP(n);return o!==0&&!oe(n)?{ok:!1,error:`refused private address ${n}`}:{ok:!0,url:t,host:n,isLiteralIp:o!==0}}async function se(e,{lookupFn:t=pt.promises.lookup}={}){let n=mt(e);if(!n.ok)return n;if(n.isLiteralIp)return{ok:!0,url:n.url,addresses:[{address:n.host,family:L.isIPv6(n.host)?6:4}]};let o;try{o=await t(n.host,{all:!0,verbatim:!0})}catch{return{ok:!1,error:`refused: ${n.host} did not resolve`}}return!Array.isArray(o)||o.length===0||o.some(r=>!oe(r.address))?{ok:!1,error:`refused: ${n.host} resolves to a non-public address`}:{ok:!0,url:n.url,addresses:o}}async function ie({requireUndici:e=!1,importUndici:t=()=>import("undici")}={}){let n,o;try{let i=await t();n=i.Agent,o=i.fetch}catch(i){if(e)throw new Error(`egress-guard: untrustedUrl pinning requires the undici package, which failed to load: ${i?.message||i}`);return null}if(typeof n!="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 r=i=>String(i).toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,""),s=new Map,a=i=>(Array.isArray(i)?i:[i]).map(c=>typeof c=="string"?{address:c}:c).filter(c=>c&&c.address).map(c=>({address:c.address,family:c.family||(L.isIPv6(c.address)?6:4)})),p=(i,c,l)=>{s.set(r(i),a(typeof c=="string"?[{address:c,family:l}]:c))},d=i=>{let c=r(i);if(L.isIP(c))return[{address:c,family:L.isIPv6(c)?6:4}];let l=s.get(c);if(!l||!l.length)throw new Error(`refused: unpinned host ${i} during pinned fetch`);return l},f=new n({connect:{lookup(i,c,l){let g;try{g=d(i)}catch(h){return l(h)}return c?.all?l(null,g):l(null,g[0].address,g[0].family)}}}),u=yt((i,c={})=>o(i,{...c,dispatcher:f}),p);return{dispatcher:f,fetch:u,pin:p,resolve:d,async close(){try{await f.destroy()}catch{}}}}var ae=Symbol.for("oracle.egressGuard.pinCapableFetch");function yt(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[ae]=Object.freeze({pin:t}),e}function ce(e){return typeof e=="function"&&typeof e[ae]?.pin=="function"}function Ie(e,t,n){if(!ce(e))throw new Error("pinFetchToAddresses: fetchImpl is not pin-capable");e[ae].pin(t,n)}var bt=new Set([408,425,429,500,502,503,504]),$e=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),gt=2,Re=4e3,ke=["authorization","x-api-key","x-tensor-api-key","0x-api-key","api-key","cookie","proxy-authorization"],wt=new Set([301,302,303,307,308]),_e=3,Et=64*1024;function At(e){let t=String(e||"").toLowerCase();return ke.includes(t)||/(^|-)(api[-_]?key|key|token|secret|auth|authorization|session|cookie|signature|access)(-|$)/.test(t)}function St(e){let t={};for(let[n,o]of Object.entries(e||{}))At(n)||(t[n]=o);return t}function xt(e,t){if(!e)throw new Error(`HTTP redirect from ${t} missing Location`);let n=new URL(String(e),String(t));if(n.protocol!=="http:"&&n.protocol!=="https:")throw new Error(`HTTP redirect from ${t} used unsupported protocol ${n.protocol}`);return n.toString()}function It(e,t){return new URL(String(e)).origin===new URL(String(t)).origin}var le=new Map,Nt=/(?:^|_)(send|submit|broadcast|sign|requestAirdrop)(?=[A-Z_]|$)/i,$t=new Set(["allMids","l2Book","outcomeMeta","spotClearinghouseState","userFills","meta","metaAndAssetCtxs","perpDexs","candleSnapshot","fundingHistory","openOrders","frontendOpenOrders","clearinghouseState","spotMeta","validatorSummaries","delegatorSummary","delegations","delegatorRewards","delegatorHistory","maxBuilderFee"]);function Te(e){let t=String(e?.method||"");return t?!Nt.test(t):!1}function Rt(e,t){if(e==="GET"&&t==null)return!0;if(e!=="POST"||t==null)return!1;let n=t;if(typeof t=="string")try{n=JSON.parse(t)}catch{return!1}return Array.isArray(n)?n.length>0&&n.every(Te):!n||typeof n!="object"?!1:n.jsonrpc&&n.method?Te(n):typeof n.type=="string"&&$t.has(n.type)&&n.action==null&&n.signature==null&&n.nonce==null}function _t(e,t,n,o={},r=null){let s={};for(let[c,l]of Object.entries(n||{}))s[c.toLowerCase()]=l;let a=Object.keys(s).filter(c=>/(^|-)(api[-_]?key|key|token|secret|auth|authorization|session|cookie|signature|access)(-|$)/.test(c)),d=[...new Set([...ke,...a])].sort().map(c=>`${c}=${s[c]??""}`).join(`
2
- `),f=Ne("sha256").update(d).digest("hex").slice(0,32),u=`${o.untrustedUrl?"untrusted":"trusted"}:${o.maxResponseBytes??"unbounded"}`,i=r==null?"-":Ne("sha256").update(String(r)).digest("hex").slice(0,32);return`${e} ${t} ${u} ${f} ${i}`}function Tt(e,t){let n=Number(t);return Number.isFinite(n)&&n>0?Math.min(n*1e3,Re):Math.min(250*2**e,Re)+Math.floor(Math.random()*100)}var Ct=e=>new Promise(t=>setTimeout(t,e));function M(e,t={}){let n=new Error(e);return n.retryable=!1,Object.assign(n,t),n}function fe(e,t,n){return M(`HTTP response from ${e} exceeded maxResponseBytes ${n} (${t})`,{oversize:!0})}function v(e){try{let t=e?.body?.cancel?.();t&&typeof t.then=="function"&&t.catch(()=>{})}catch{}}function Ot(e){return e?e.byteLength??e.length??0:0}async function Ce(e,t,{url:n,truncate:o=!1,onOversize:r}={}){if(t==null)return await e.text();let s=Number(e.headers?.get?.("content-length"));if(Number.isFinite(s)&&s>t&&(v(e),!o))throw fe(n,`content-length ${s}`,t);let a=e.body?.getReader?.();if(!a){let i=await e.text(),c=Buffer.byteLength(i,"utf8");if(c>t){if(!o)throw fe(n,`body ${c} bytes`,t);return Buffer.from(i,"utf8").subarray(0,t).toString("utf8")}return i}let p=[],d=0,f=!1;try{for(;;){let{value:i,done:c}=await a.read();if(c)break;if(i&&(p.push(Buffer.from(i)),d+=Ot(i),d>t)){f=!0;break}}}finally{if(f)try{await a.cancel()}catch{}try{a.releaseLock?.()}catch{}}if(f&&(typeof r=="function"&&r(),!o))throw fe(n,`streamed ${d} bytes`,t);let u=Buffer.concat(p);return(f?u.subarray(0,t):u).toString("utf8")}function Oe(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}async function kt(e,{fetchImpl:t,method:n,headers:o,body:r,timeoutMs:s,lookupFn:a,realFetch:p,untrustedUrl:d=!1,maxResponseBytes:f=null,importUndici:u,validateResponse:i,signal:c}){let l=new AbortController,g=setTimeout(()=>l.abort(),s),h=c?typeof AbortSignal.any=="function"?AbortSignal.any([c,l.signal]):c:l.signal,y=null,R=t,P=a?{lookupFn:a}:{};if(d&&!p&&!ce(R))throw M(`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 H=async(w,{status:S=null}={})=>{let E=await se(w,P);if(!E.ok)throw M(S==null?`HTTP refused ${w}: ${E.error}`:`HTTP redirect to ${w} ${E.error}`,S==null?{}:{status:S});let m=new URL(w).hostname;if(p){if(y&&(await y.close(),y=null),!y)try{y=await ie({requireUndici:!0,...u?{importUndici:u}:{}})}catch(x){throw M(S==null?`HTTP refused ${w}: ${x?.message||x}`:`HTTP redirect to ${w} refused: ${x?.message||x}`,S==null?{}:{status:S})}y.pin(m,E.addresses),R=y.fetch}else Ie(R,m,E.addresses);return E};try{let w=String(e),S={...o||{}};d&&await H(w);for(let E=0;E<=_e;E+=1){let m=await R(w,{method:n,headers:S,body:r,signal:h,redirect:"manual"});if(wt.has(m.status)){if(n!=="GET"&&n!=="HEAD"){let $=await Ce(m,f??Et,{url:w,truncate:!0}),_=new Error(`HTTP ${m.status} ${n} ${w} redirected non-idempotent request`);throw _.status=m.status,_.body=Oe($)??$.slice(0,300),_}if(E===_e)throw v(m),new Error(`HTTP redirect loop for ${e}`);let N=m.headers?.get?.("location"),C;try{C=xt(N,w)}catch($){throw v(m),$}let U=!It(C,w);if(v(m),U&&(S=St(S)),d)await H(C,{status:m.status});else if(U){let $=await se(C,P);if(!$.ok){let _=new Error(`HTTP redirect from ${w} ${$.error}`);throw _.status=m.status,_.retryable=!1,_}p&&$.addresses?.length&&(y||(y=await ie(u?{importUndici:u}:{})),y&&(y.pin(new URL(C).hostname,$.addresses),R=y.fetch))}w=C;continue}if(typeof i=="function")try{await i(m,{url:w})}catch(N){throw v(m),M(N?.message||String(N))}let x=await Ce(m,f,{url:w,onOversize:()=>l.abort()}),V=Oe(x);if(!m.ok){let N=new Error(`HTTP ${m.status} ${n} ${w}`);throw N.status=m.status,N.retryAfter=m.headers?.get?.("retry-after")??null,N.body=V??x.slice(0,300),N}return V??x}throw new Error(`HTTP redirect loop for ${e}`)}finally{clearTimeout(g),y&&await y.close()}}async function Le(e,t={}){let n=t.fetchImpl||globalThis.fetch;if(typeof n!="function")throw new Error("fetch unavailable \u2014 pass opts.fetchImpl");let o=t.timeoutMs??12e3,r=(t.method||"GET").toUpperCase(),s={Accept:"application/json",...t.headers||{}},a=t.body;a!=null&&typeof a!="string"&&(s["Content-Type"]=s["Content-Type"]||"application/json",a=JSON.stringify(a));let p=Number.isInteger(t.retries)?Math.max(t.retries,0):gt,d=t.lookupFn,f=!t.fetchImpl,u=t.untrustedUrl===!0,i=t.importUndici,c=t.validateResponse,l=t.signal,g=Number(t.maxResponseBytes),h=Number.isFinite(g)&&g>0?Math.floor(g):null,y=async()=>{let S;for(let E=0;E<=p;E++){l?.throwIfAborted?.();try{return await kt(e,{fetchImpl:n,method:r,headers:s,body:a,timeoutMs:o,lookupFn:d,realFetch:f,untrustedUrl:u,maxResponseBytes:h,importUndici:i,validateResponse:c,signal:l})}catch(m){S=m;let x=m?.status,V=m?.name==="AbortError"||m?.name==="TimeoutError"||l?.aborted,N=new Set([408,425,429]),C=m?.retryable===!1?!1:x!=null?N.has(x)||bt.has(x)&&$e.has(r):!V&&$e.has(r);if(E===p||!C)throw m;let U=Tt(E,m?.retryAfter);l?await new Promise(($,_)=>{let ve=setTimeout($,U);l.addEventListener("abort",()=>{clearTimeout(ve),_(l.reason||new DOMException("Aborted","AbortError"))},{once:!0})}):await Ct(U)}}throw S};if(!(t.dedupe!==!1&&!l&&Rt(r,a)))return y();let P=_t(r,e,s,{untrustedUrl:u,maxResponseBytes:h},a),H=le.get(P);if(H)return H;let w=y().finally(()=>le.delete(P));return le.set(P,w),w}var Pe={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}},Lt=new Map(Object.values(Pe).map(e=>[e.chainId,e]));function He(e){return Lt.get(Number(e))||null}function Ue(e,t=process.env){let n=He(e);if(!n)return null;for(let o of n.rpcEnv){let r=(t[o]||"").trim();if(r)return r}return null}import{Interface as Pt,getAddress as Ht}from"ethers";var On=new Pt(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);function ue(e,t){try{return Ht(e).toLowerCase()}catch{throw new Error(`${t} must be a valid EVM address`)}}function Ut(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 de(e){return e==null?null:Number.parseInt(String(e),16)}var Ft={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 jt(e,{rpcUrl:t,env:n=process.env}={}){if(t)return t;let o=Ue(e,n);return o||Ft[Number(e)]||null}var zt=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/;function Dt(e){let t=String(e||""),n=t.toLowerCase();if(t!==t.trim()||!/^[a-zA-Z0-9_]+$/.test(t)||!zt.test(n))throw new Error(`evm-rpc: ${t} refused \u2014 @oracle-agent/oracle is prepare-only (read RPC only; no broadcast/sign)`);return n}var B=new Map,Fe=new Map;function Mt(e){let t=new Error(e?.message||JSON.stringify(e));return t.code=e?.code,t}function vt(e){if(e?.error)throw Mt(e.error);return e?.result}function Bt(e,t,n){return`${e}
1
+ import{wordlists as ut}from"ethers";var lt=new Set(["privatekey","privkey","secretkey","seedphrase","seed","mnemonic","passphrase","password","keystore","keymaterial","wif","xprv","xpriv","bearer","authorization","signature","apikey","credential"]),ft=[/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/,/\bxprv[0-9A-Za-z]{50,}\b/],dt=new Set([12,15,18,21,24]);function pt(e){let t=String(e).trim().toLowerCase().split(/\s+/).filter(Boolean);return dt.has(t.length)&&t.every(r=>ut.en.getWordIndex(r)>=0)}var ht=/^\s*(?:0x)?[0-9a-fA-F]{64}\s*$/,mt=/(hash|digest|root|salt|nonce|proof|commitment|sig|id)(?:e?s)?$/i,yt=new Set(["calldata","data","publickey","pubkey","message","payload","input","extradata"]);function bt(e){let t=Ce(e);return yt.has(t)||mt.test(t)}var X=class extends Error{constructor(t){super(`action receipt refused: secret-bearing field at ${t}`),this.name="ActionReceiptSecretError",this.code="ACTION_RECEIPT_SECRET"}};function Ce(e){return String(e).replace(/[^a-z0-9]/gi,"").toLowerCase()}function wt(e){let t=Ce(e);return[...lt].some(r=>t.includes(r))}function gt(e,t,r){if(typeof t=="string"){if(ft.some(o=>o.test(t))||pt(t))throw new X(r);if(ht.test(t)&&!bt(e))throw new X(r)}}function le(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string")return gt(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)=>le(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(wt(n))throw new X(s);e[n]!==void 0&&(o[n]=le(e[n],s,n))}return o}function ke(e){return le(e)}var Tr=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),Or=Object.freeze(["read","simulate"]);var Ir=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}},Et=/(private[_-]?key|secret|bearer|keystore|mnemonic|seed[_-]?phrase|passphrase|password|api[_-]?key|access[_-]?token|auth[_-]?token|session[_-]?token|signer[_-]?url|signature)/i,At=Object.freeze(["privkey","wif","xprv","seed"]);function fe(e){let t=String(e),r=t.toLowerCase().replace(/[\s._-]+/g,"");return Et.test(t)||At.includes(r)}var je=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}]),Le=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"]);function St(e){return e.replace(/"([A-Za-z0-9_-]+)"\s*:\s*"(?:0x)?([0-9a-fA-F]{64})"/g,(t,r)=>Le.includes(String(r).toLowerCase().replace(/[_-]/g,""))?`"${r}":"<hex64>"`:t)}function He(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=St(t);for(let{rule:n,re:s}of je)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&&fe(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=Le.includes(String(o).toLowerCase().replace(/[_-]/g,""));for(let{rule:s,re:a}of je)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"&&fe(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(fe(n))throw new j(`${t}.${n}`,"forbidden-key-name");B(s,`${t}.${n}`,r,n)}return e}var xt=/[\u0000-\u001f\u007f]/;function de(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 pe(e,t="control input"){try{B(e,t),He(e)}catch(r){throw new TypeError(`${t} contains secret or custody material: ${r.message}`)}return e}function Z(e,{required:t=[],optional:r=[]}={},o="object"){de(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 he(e,t,r=200,{lower:o=!1}={}){if(typeof e!="string"||!e.trim()||e.length>r||xt.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 Q(e,t,r=80){let o=he(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 ne(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 C(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))C(t);Object.freeze(e)}return e}var Tt=Object.freeze(["confirmations","finalizedTag","checkpoint"]),M=Object.freeze({UNKNOWN:"UNKNOWN",INCLUDED:"INCLUDED",FINAL:"FINAL"}),Ot=Object.freeze(["LIVE","STALE","UNKNOWN","UNAVAILABLE"]);function Ue({family:e,chainId:t},r="chain"){let o=Q(e,`${r}.family`,40),n;if(o==="evm"){if(typeof t=="number")n=String(ne(t,`${r}.chainId`,{positive:!0}));else if(n=he(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=Q(t,`${r}.chainId`,80);return{family:o,chainId:n}}function It(e,t="chain"){return Z(e,{required:["family","chainId"]},t),C(Ue(e,t))}function Fe(e,t="finality rule"){pe(e,t),de(e,t);let r=e.rule;if(!Tt.includes(r))throw new TypeError(`${t}.rule must be confirmations, finalizedTag, or checkpoint`);let o=r==="confirmations"?"confirmations":r;Z(e,{required:["family","chainId","rule",o]},t);let n=Ue(e,t);return r==="confirmations"?{...n,rule:r,confirmations:ne(e.confirmations,`${t}.confirmations`,{positive:!0})}:{...n,rule:r,[o]:Q(e[o],`${t}.${o}`,80)}}function me(e){if(!Array.isArray(e))throw new TypeError("finality policy rules must be an array");let t=e.map((o,n)=>Fe(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 C({policyVersion:1,rules:t})}function Nt(e){if(Z(e,{required:["policyVersion","rules"]},"finality policy"),e.policyVersion!==1||!Array.isArray(e.rules))throw new TypeError("unsupported finality policy");return me(e.rules)}function ve(e,t){let r=It(t,"finality query"),n=Nt(e).rules.find(s=>s.family===r.family&&s.chainId===r.chainId);return n?C({status:"KNOWN",...r,rule:n}):C({status:M.UNKNOWN,reason:"MISSING_FINALITY_RULE",...r,rule:null})}function Rt(e,t){if(e==null)return null;pe(e,"finality evidence");let r=t.rule==="confirmations"?"confirmations":t.rule;if(Z(e,{required:["status"],optional:[r]},"finality evidence"),!Ot.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"?ne(e.confirmations,"finality evidence.confirmations",{positive:!0}):Q(e[r],`finality evidence.${r}`,80)),o}function ze(e,t){if(!e||e.status===M.UNKNOWN||e.rule==null)return C({status:M.UNKNOWN,final:!1,reason:"MISSING_FINALITY_RULE"});let r=Fe(e.rule??e,"resolved finality rule"),o=Rt(t,r);if(o==null)return C({status:M.UNKNOWN,final:!1,reason:"MISSING_FINALITY_EVIDENCE"});if(o.status!=="LIVE")return C({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,C({status:n?M.FINAL:M.INCLUDED,final:n,reason:n?"PINNED_RULE_SATISFIED":"PINNED_RULE_NOT_SATISFIED",rule:r})}var $t=1,Kr=Object.freeze(["SUCCESS","FAIL","UNKNOWN"]),E=(...e)=>e.find(t=>t!=null),ee=e=>!!e&&typeof e=="object"&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype;function _t(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 De(e){return typeof e=="string"&&["FAIL","FAILED","FAILURE","ORPHAN","ORPHANED","REVERTED"].includes(e.trim().toUpperCase())}function be(e){return e==null?e:Array.isArray(e)?e.map(be):ee(e)?Object.fromEntries(Object.keys(e).sort().map(t=>[t,be(e[t])])):String(e)}function Pt(e,t,r,o){let n=E(e.finalityEvidence,o?.finality,e.evidence),s=E(e.finalityPolicy,e.policy);try{return s==null&&ee(e.finalityRule)&&(s=me([{family:t,chainId:r,...e.finalityRule}])),s==null||t==null||r==null?{status:"UNKNOWN",final:!1,reason:"MISSING_FINALITY_RULE"}:ze(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 Ct(e){return e==null?null:String(e).trim().toLowerCase()}function ye(...e){let t=e.map(Ct).filter(Boolean);return t.length<=1||t.every(r=>r===t[0])}function oe(e={}){if(!ee(e))throw new TypeError("verified receipt: input object required");let t=ke(e),r=E(t.actionReceipt,t.receipt),o=ee(r)?r:t,n=E(t.observation,t.chainObservation,t.observedReceipt),s=ee(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),u=E(t.chainId,o.chainId,o.chain?.chainId,n?.chainId,n?.chain?.chainId),l=!ye(t.txHash,o.txHash,o.transactionHash,n?.txHash,n?.transactionHash)||!ye(t.family,o.family,o.chain?.family,n?.family,n?.chain?.family)||!ye(t.chainId,o.chainId,o.chain?.chainId,n?.chainId,n?.chain?.chainId),i=Pt(t,d,u,s&&!l?n:null),c=_t(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";De(f)||!l&&(s&&c==="FAIL"||De(p))?y="FAIL":!l&&a&&s&&c==="SUCCESS"&&["INCLUDED","FINAL"].includes(i.status)&&(y="SUCCESS");let h={verifiedReceiptVersion:$t,status:y};l&&(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",u),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 w=E(t.balanceChanges,n?.balanceChanges,n?.balances,o.balanceChanges,o.balances);return w!=null&&(h.balanceChanges=be(w)),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)),C(h)}import{createHash as Ut}from"node:crypto";import{types as H}from"node:util";import V from"node:net";import kt from"node:dns";var jt=new Set(["localhost","metadata.google.internal","metadata.goog"]);function se(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("::"),u=8-s.length-a.length;if(!d&&u!==0||d&&u<1)return null;let l=[...s,...Array(Math.max(0,u)).fill(0),...a];return l.length!==8?null:Uint8Array.from(l.flatMap(i=>[i>>8,i&255]))}function we(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 ge(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=se(e);if(!t)return!1;let r=se("::ffff:0:0");return we(t,r,96)?ge([...t.slice(12)].join(".")):we(t,se("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([n,s])=>we(t,se(n),s)):!1}return!1}function Lt(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(jt.has(r)||r.endsWith(".localhost")||r.endsWith(".internal"))return{ok:!1,error:`refused internal host ${r}`};let o=V.isIP(r);return o!==0&&!ge(r)?{ok:!1,error:`refused private address ${r}`}:{ok:!0,url:t,host:r,isLiteralIp:o!==0}}async function Ee(e,{lookupFn:t=kt.promises.lookup}={}){let r=Lt(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=>!ge(n.address))?{ok:!1,error:`refused: ${r.host} resolves to a non-public address`}:{ok:!0,url:r.url,addresses:o}}async function Ae({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))},u=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},l=new r({connect:{lookup(c,f,p){let y;try{y=u(c)}catch(h){return p(h)}return f?.all?p(null,y):p(null,y[0].address,y[0].family)}}}),i=Ht((c,f={})=>o(c,{...f,dispatcher:l}),d);return{dispatcher:l,fetch:i,pin:d,resolve:u,async close(){try{await l.destroy()}catch{}}}}var Se=Symbol.for("oracle.egressGuard.pinCapableFetch");function Ht(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[Se]=Object.freeze({pin:t}),e}function xe(e){return typeof e=="function"&&typeof e[Se]?.pin=="function"}function Be(e,t,r){if(!xe(e))throw new Error("pinFetchToAddresses: fetchImpl is not pin-capable");e[Se].pin(t,r)}var Ft=new Set([408,425,429,500,502,503,504]),Me=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),vt=2,Ve=4e3,zt=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"aborted")?.get,Dt=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"reason")?.get,Bt=AbortSignal.prototype.throwIfAborted,Mt=EventTarget.prototype.addEventListener,Ke=typeof AbortSignal.any=="function"?AbortSignal.any.bind(AbortSignal):null,Ie=e=>e?zt.call(e):!1,Vt=e=>e?Dt.call(e):void 0,Kt=new Set([301,302,303,307,308]),ae=3,Qr=64*1024,L=Object.freeze({depth:32,nodes:1e4,fields:1e4,arrayLength:1e4,bytes:1024*1024});function x(e){return F(`HTTP JSON body refused: ${e}`)}function Gt(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 Wt(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)},u=i=>{if(Buffer.byteLength(i,"utf8")>L.bytes)throw x("serialized byte limit exceeded");return JSON.stringify(i)},l=(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(u(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(Gt(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 O=0;O<i.length;O+=1){let v=Object.getOwnPropertyDescriptor(i,String(O));if(!v||!Object.hasOwn(v,"value")||v.enumerable!==!0)throw x("array entries must be dense enumerable own data")}let w=0;for(let O in i){if(s+=1,s>L.fields)throw x("enumeration limit exceeded");if(Object.hasOwn(i,O)&&(w+=1,w>i.length))throw x("named array fields are unsupported")}if(w!==i.length)throw x("array entries must be dense enumerable own data");d("[");for(let O=0;O<i.length;O+=1)O&&d(","),l(Object.getOwnPropertyDescriptor(i,String(O)).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(u(p[y][0])),d(":"),l(p[y][1],c+1);d("}")}finally{a.delete(i)}};return l(e,0),t.join("")}function Jt(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 qt(){return Object.assign(Object.create(null),{Accept:"application/json"})}function Yt(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 Xt(e,t){return new URL(String(e)).origin===new URL(String(t)).origin}var Te=new Map,Ge=new WeakMap,We=1;function ie(e){if((typeof e!="object"||e===null)&&typeof e!="function")return`${typeof e}:${String(e)}`;let t=Ge.get(e);return t||(t=We,We+=1,Ge.set(e,t)),`reference:${t}`}var Zt=new Set(["eth_blockNumber","eth_call","eth_chainId","eth_estimateGas","getHealth","minimumLedgerSlot","net_version","simulateTransaction","web3_clientVersion"]),Qt=new Set(["allMids","l2Book","outcomeMeta","spotClearinghouseState","userFills","meta","metaAndAssetCtxs","perpDexs","candleSnapshot","fundingHistory","openOrders","frontendOpenOrders","clearinghouseState","spotMeta","validatorSummaries","delegatorSummary","delegations","delegatorRewards","delegatorHistory","maxBuilderFee"]);function Je(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?Zt.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 qe(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(Je);if(!r||typeof r!="object")return!1;if(Object.hasOwn(r,"jsonrpc")||Object.hasOwn(r,"method"))return Je(r);let o=Object.hasOwn(r,"type")?r.type:null;return typeof o=="string"&&Qt.has(o)&&(!Object.hasOwn(r,"action")||r.action==null)&&(!Object.hasOwn(r,"signature")||r.signature==null)&&(!Object.hasOwn(r,"nonce")||r.nonce==null)}function er(e,t,r,o={},n=null){let s=Ut("sha256"),a=(u,l)=>{let i=String(l);s.update(String(Buffer.byteLength(u,"utf8"))).update(":").update(u),s.update("=").update(String(Buffer.byteLength(i,"utf8"))).update(":").update(i).update(`
2
+ `)};a("method",e),a("url",t),Object.keys(r||{}).map((u,l)=>({name:u.toLowerCase(),order:l,value:String(r[u])})).sort((u,l)=>u.name.localeCompare(l.name)||u.order-l.order).forEach((u,l)=>{a(`header-name-${l}`,u.name),a(`header-value-${l}`,u.value)}),a("body",n??"-");for(let u of["untrustedUrl","maxResponseBytes","sameOriginRedirectsOnly","redirectPolicy","maxRedirects","timeoutMs","retries","fetchImpl","realFetch","lookupFn","importUndici","validateResponse"])a(`context-${u}`,o[u]??"-");return s.digest("hex")}function tr(e,t){let r=Number(t);return Number.isFinite(r)&&r>0?Math.min(r*1e3,Ve):Math.min(250*2**e,Ve)+Math.floor(Math.random()*100)}var rr=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 Oe(e,t,r){return F(`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 nr(e){return e?e.byteLength??e.length??0:0}async function or(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 Oe(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 Oe(r,`body ${f} bytes`,t);return Buffer.from(c,"utf8").subarray(0,t).toString("utf8")}return c}let d=[],u=0,l=!1;try{for(;;){let{value:c,done:f}=await a.read();if(f)break;if(c&&(d.push(Buffer.from(c)),u+=nr(c),u>t)){l=!0;break}}}finally{if(l)try{await a.cancel()}catch{}try{a.releaseLock?.()}catch{}}if(l&&(typeof n=="function"&&n(),!o))throw Oe(r,`streamed ${u} bytes`,t);let i=Buffer.concat(d);return(l?i.subarray(0,t):i).toString("utf8")}function sr(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}async function ir(e,{fetchImpl:t,method:r,headers:o,body:n,timeoutMs:s,lookupFn:a,realFetch:d,untrustedUrl:u=!1,maxResponseBytes:l=null,sameOriginRedirectsOnly:i=!1,importUndici:c,validateResponse:f,signal:p,redirectPolicy:y="follow",maxRedirects:h=ae}){let w=new AbortController,O=setTimeout(()=>w.abort(),s),v=p?Ke?Ke([p,w.signal]):p:w.signal,S=null,$=t,G=a?{lookupFn:a}:{};if(u&&!d&&!xe($))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 J=async(b,{status:I=null}={})=>{let N=await Ee(b,G);if(!N.ok)throw F(I==null?`HTTP refused ${b}: ${N.error}`:`HTTP redirect to ${b} ${N.error}`,I==null?{}:{status:I});let U=new URL(b).hostname;if(d){if(S&&(await S.close(),S=null),!S)try{S=await Ae({requireUndici:!0,...c?{importUndici:c}:{}})}catch(m){throw F(I==null?`HTTP refused ${b}: ${m?.message||m}`:`HTTP redirect to ${b} refused: ${m?.message||m}`,I==null?{}:{status:I})}S.pin(U,N.addresses),$=S.fetch}else Be($,U,N.addresses);return N};try{let b=String(e),I=Object.assign(Object.create(null),o||{});u&&await J(b);for(let N=0;N<=h;N+=1){let U=Object.assign(Object.create(null),{method:r,headers:I,body:n,signal:v,redirect:"manual",dispatcher:void 0}),m=await $(b,U);if((y==="error"||h===0)&&m.status>=300&&m.status<400)throw K(m),F(`HTTP ${m.status} ${r} redirect refused`,{status:m.status,redirectRefused:!0});if(Kt.has(m.status)){let P=i===!0&&r==="POST"&&[307,308].includes(m.status)&&qe(r,n);if(r!=="GET"&&r!=="HEAD"&&!P){K(m);let T=new Error(`HTTP ${m.status} ${r} ${b} redirected non-idempotent request`);throw T.status=m.status,T}if(N===h)throw K(m),F(`HTTP ${m.status} ${r} redirect budget exhausted`,{status:m.status,redirectRefused:!0});let _e=m.headers?.get?.("location"),k;try{k=Yt(_e,b)}catch(T){throw K(m),T}let z=!Xt(k,b);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&&(I=qt(I)),u)await J(k,{status:m.status});else if(z){let T=await Ee(k,G);if(!T.ok){let A=new Error(`HTTP redirect from ${b} ${T.error}`);throw A.status=m.status,A.retryable=!1,A}d&&T.addresses?.length&&(S||(S=await Ae(c?{importUndici:c}:{})),S&&(S.pin(new URL(k).hostname,T.addresses),$=S.fetch))}b=k;continue}if(typeof f=="function")try{await f(m,{url:b})}catch(P){throw K(m),F(P?.message||String(P))}let _=await or(m,l,{url:b,onOversize:()=>w.abort()}),q=sr(_);if(!m.ok){let P=new Error(`HTTP ${m.status} ${r} ${b}`);throw P.status=m.status,P.retryAfter=m.headers?.get?.("retry-after")??null,P.body=q??_.slice(0,300),P}return q??_}throw new Error(`HTTP redirect loop for ${e}`)}catch(b){if(w.signal.aborted&&!Ie(p)){let I=b&&(typeof b=="object"||typeof b=="function")&&!H.isProxy(b)?b:null,N=I?Object.getOwnPropertyDescriptor(I,"oversize"):null;if(!(N&&Object.hasOwn(N,"value")&&N.value===!0))try{if(!I)throw new TypeError("unsafe rejection");Object.defineProperties(I,{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 b}finally{clearTimeout(O),S&&await S.close()}}async function Ye(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 A of Object.getOwnPropertyNames(t)){let g=Object.getOwnPropertyDescriptor(t,A);if(!(A==="toJSON"&&g&&Object.hasOwn(g,"value")&&g.value===void 0)){if(!r.has(A))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=A=>{if(t==null||!Object.hasOwn(t,A))return;let g=Object.getOwnPropertyDescriptor(t,A);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 u=o("maxRedirects");if(u!==void 0&&(!Number.isInteger(u)||u<0||u>ae))throw new TypeError(`HTTP maxRedirects must be an integer from 0 through ${ae}`);if(d==="error"&&u!==void 0&&u!==0)throw new TypeError('HTTP redirectPolicy "error" requires maxRedirects 0 when supplied');let l=d??"follow",i=l==="error"?0:u??ae;for(let A of["dedupe","untrustedUrl","sameOriginRedirectsOnly"]){let g=o(A);if(g!==void 0&&typeof g!="boolean")throw new TypeError(`HTTP ${A} 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{Ie(f)}catch{throw new TypeError("HTTP signal must be a native AbortSignal")}}for(let A of["importUndici","lookupFn","validateResponse"]){let g=o(A);if(g!==void 0&&typeof g!="function")throw new TypeError(`HTTP ${A} 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,w=(n||"GET").toUpperCase(),O=o("headers"),v=Jt(O),S=Object.assign(Object.create(null),v);Object.keys(S).some(A=>A.toLowerCase()==="accept")||(S.Accept="application/json");let $=o("body");$!=null&&typeof $!="string"&&(Object.keys(S).find(g=>g.toLowerCase()==="content-type")||(S["Content-Type"]="application/json"),$=Wt($));let G=a??vt,J=o("lookupFn"),b=!p,I=o("untrustedUrl")===!0,N=o("sameOriginRedirectsOnly")===!0,U=o("importUndici"),m=o("validateResponse"),_=f,q=c??null,P=async()=>{let A;for(let g=0;g<=G;g++){_&&Bt.call(_);try{return await ir(e,{fetchImpl:y,method:w,headers:S,body:$,timeoutMs:h,lookupFn:J,realFetch:b,untrustedUrl:I,maxResponseBytes:q,sameOriginRedirectsOnly:N,importUndici:U,validateResponse:m,signal:_,redirectPolicy:l,maxRedirects:i})}catch(D){A=D;let W=ue=>{if(!D||typeof D!="object"&&typeof D!="function"||H.isProxy(D))return;let Y=Object.getOwnPropertyDescriptor(D,ue);return Y&&Object.hasOwn(Y,"value")?Y.value:void 0},ce=W("status"),st=W("oracleTimeout")===!0||W("name")==="AbortError"||W("name")==="TimeoutError"||Ie(_),it=new Set([408,425,429]),at=W("retryable")===!1?!1:ce!=null?it.has(ce)||Ft.has(ce)&&Me.has(w):!st&&Me.has(w);if(g===G||!at)throw D;let Pe=tr(g,W("retryAfter"));_?await new Promise((ue,Y)=>{let ct=setTimeout(ue,Pe);Mt.call(_,"abort",()=>{clearTimeout(ct),Y(Vt(_)||new DOMException("Aborted","AbortError"))},{once:!0})}):await rr(Pe)}}throw A};if(!(o("dedupe")!==!1&&!_&&qe(w,$)))return P();let k=er(w,e,S,{untrustedUrl:I,maxResponseBytes:q,sameOriginRedirectsOnly:N,redirectPolicy:l,maxRedirects:i,timeoutMs:h,retries:G,fetchImpl:ie(y),realFetch:b,lookupFn:ie(J),importUndici:ie(U),validateResponse:ie(m)},$),z=Te.get(k);if(z)return z;let T=P().finally(()=>Te.delete(k));return Te.set(k,T),T}var Xe={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}},ar=new Map(Object.values(Xe).map(e=>[e.chainId,e]));function Ze(e){return ar.get(Number(e))||null}function Qe(e,t=process.env){let r=Ze(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 cr,getAddress as ur}from"ethers";var an=new cr(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);function Ne(e,t){try{return ur(e).toLowerCase()}catch{throw new Error(`${t} must be a valid EVM address`)}}function lr(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 Re(e){return e==null?null:Number.parseInt(String(e),16)}var fr={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 dr(e,{rpcUrl:t,env:r=process.env}={}){if(t)return t;let o=Qe(e,r);return o||fr[Number(e)]||null}var pr=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/;function hr(e){let t=String(e||""),r=t.toLowerCase();if(t!==t.trim()||!/^[a-zA-Z0-9_]+$/.test(t)||!pr.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 te=new Map,et=new Map;function mr(e){let t=new Error(e?.message||JSON.stringify(e));return t.code=e?.code,t}function yr(e){if(e?.error)throw mr(e.error);return e?.result}function br(e,t,r){return`${e}
3
3
  ${t}
4
- ${JSON.stringify(n??[])}`}async function Kt(e,t,n){return Le(e,{method:"POST",body:t,fetchImpl:n.fetchImpl,timeoutMs:n.timeoutMs??12e3,signal:n.signal})}async function pe(e,t,n=[],o={}){let r=String(t||""),s=Dt(r),a=jt(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 u=Fe.get(a);if(u!=null)return u}let d=o.dedupe!==!1&&!o.signal?Bt(a,r,n):null;if(d&&B.has(d))return B.get(d);let f=(async()=>{let u=await Kt(a,{jsonrpc:"2.0",id:1,method:t,params:n},o),i=vt(u);return s==="eth_chainid"&&typeof i=="string"&&Fe.set(a,i),i})();return d&&(B.set(d,f),f.finally(()=>{B.get(d)===f&&B.delete(d)}).catch(()=>{})),f}async function je(e={},t={}){let n=Number(e.chainId??t.chainId??1),o=Ut(e.txHash||e.hash||e.transactionHash),r=await pe(n,"eth_getTransactionReceipt",[o],t);if(!r)return{ok:!1,chainId:n,txHash:o,status:"pending",receipt:null,reason:"receipt pending"};let s=de(r.status),a=s===1,p=s===1?"success":s===0?"reverted":"unknown",d=a?null:p==="reverted"?"transaction reverted":"unknown receipt status",f=e.expectedTo?ue(e.expectedTo,"expectedTo"):null,u=r.to?ue(r.to,"receipt.to"):null;return f&&u!==f&&(a=!1,d=`to mismatch: expected ${f}, got ${u||"null"}`),{ok:a,chainId:n,txHash:o,status:p,reason:d,statusCode:s,to:u,from:r.from?ue(r.from,"receipt.from"):null,blockNumber:de(r.blockNumber),transactionIndex:de(r.transactionIndex),logs:Array.isArray(r.logs)?r.logs:[],receipt:r}}var Vt=/^0x[0-9a-f]{64}$/;function Gt(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 Wt({txHash:e,chainId:t,rpcUrl:n},o={}){let r=String(e||"").trim().toLowerCase();if(!Vt.test(r))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||je,p=o.rpcCall||pe,d={...o.rpcOptions||{},...n?{rpcUrl:n}:{}},f;try{f=await a({txHash:r,chainId:s},d)}catch(l){return{observation:null,reason:`RPC_UNAVAILABLE: ${l.message}`}}if(!f||f.receipt==null)return{observation:null,reason:f?.reason||"receipt pending"};let u=null,i=f.blockNumber;if(Number.isSafeInteger(i))try{let l=Gt(await p(s,"eth_blockNumber",[],d));l!=null&&l>=i&&(u=l-i+1)}catch{}let c={txHash:r,family:"evm",chainId:String(s),receiptStatus:f.status==="success"?"SUCCESS":f.status==="reverted"?"FAIL":"UNKNOWN",block:i==null?void 0:String(i),observedAt:new Date().toISOString(),finality:{status:"LIVE",...u==null?{}:{confirmations:u}}};return u!=null&&(c.confirmations=u),{observation:c,reason:null}}async function ze({txHash:e,chainId:t,confirmations:n=1,rpcUrl:o},r={}){let{observation:s,reason:a}=await Wt({txHash:e,chainId:t,rpcUrl:o},r),p=W({txHash:String(e).trim().toLowerCase(),family:"evm",chainId:String(Number(t)),finalityRule:{rule:"confirmations",confirmations:n},...s?{observation:s}:{}});return{receipt:p,observed:!!s,final:p.finalityState==="FINAL",requiredConfirmations:n,reason:a}}var De={SUCCESS:0,FAIL:2,UNKNOWN:3};function K(e,t){let n=e.find(r=>r.startsWith(`--${t}=`));if(n)return n.split("=").slice(1).join("=");let o=e.indexOf(`--${t}`);return o>=0?e[o+1]:void 0}function Me(e,{observed:t,reason:n,final:o,requiredConfirmations:r}){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 ${r})`}`),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&&n&&s.push(` not observed ${n}`),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 wr(e,t,r){return Ye(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=hr(n),a=dr(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=et.get(a);if(i!=null)return i}let u=o.dedupe!==!1&&!o.signal?br(a,n,r):null;if(u&&te.has(u))return te.get(u);let l=(async()=>{let i=await wr(a,{jsonrpc:"2.0",id:1,method:t,params:r},o),c=yr(i);return s==="eth_chainid"&&typeof c=="string"&&et.set(a,c),c})();return u&&(te.set(u,l),l.finally(()=>{te.get(u)===l&&te.delete(u)}).catch(()=>{})),l}async function tt(e={},t={}){let r=Number(e.chainId??t.chainId??1),o=lr(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=Re(n.status),a=s===1,d=s===1?"success":s===0?"reverted":"unknown",u=a?null:d==="reverted"?"transaction reverted":"unknown receipt status",l=e.expectedTo?Ne(e.expectedTo,"expectedTo"):null,i=n.to?Ne(n.to,"receipt.to"):null;return l&&i!==l&&(a=!1,u=`to mismatch: expected ${l}, got ${i||"null"}`),{ok:a,chainId:r,txHash:o,status:d,reason:u,statusCode:s,to:i,from:n.from?Ne(n.from,"receipt.from"):null,blockNumber:Re(n.blockNumber),transactionIndex:Re(n.transactionIndex),logs:Array.isArray(n.logs)?n.logs:[],receipt:n}}var gr=/^0x[0-9a-f]{64}$/;function Er(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 Ar({txHash:e,chainId:t,rpcUrl:r},o={}){let n=String(e||"").trim().toLowerCase();if(!gr.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||tt,d=o.rpcCall||$e,u={...o.rpcOptions||{},...r?{rpcUrl:r}:{}},l;try{l=await a({txHash:n,chainId:s},u)}catch(p){return{observation:null,reason:`RPC_UNAVAILABLE: ${p.message}`}}if(!l||l.receipt==null)return{observation:null,reason:l?.reason||"receipt pending"};let i=null,c=l.blockNumber;if(Number.isSafeInteger(c))try{let p=Er(await d(s,"eth_blockNumber",[],u));p!=null&&p>=c&&(i=p-c+1)}catch{}let f={txHash:n,family:"evm",chainId:String(s),receiptStatus:l.status==="success"?"SUCCESS":l.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 rt({txHash:e,chainId:t,confirmations:r=1,rpcUrl:o},n={}){let{observation:s,reason:a}=await Ar({txHash:e,chainId:t,rpcUrl:o},n),d=oe({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 nt={SUCCESS:0,FAIL:2,UNKNOWN:3};function re(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 ot(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 jn={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||[],n=t.includes("--quiet"),o=t.indexOf("--json"),r=o>=0?t[o+1]:void 0;if(r&&!r.startsWith("--")){let h;try{h=JSON.parse(r)}catch(R){return process.stderr.write(`receipt: bad json: ${R.message}
7
- `),1}let y;try{y=W(h)}catch(R){return process.stderr.write(`receipt: ${R.message}
8
- `),1}return process.stdout.write(n?`${JSON.stringify(y)}
9
- `:Me(y,{observed:!0,reason:null})),De[y.status]}let s=K(t,"hash");if(!s)return process.stderr.write(`receipt: --hash required
6
+ `}var hn={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(O){return process.stderr.write(`receipt: bad json: ${O.message}
7
+ `),1}let w;try{w=oe(h)}catch(O){return process.stderr.write(`receipt: ${O.message}
8
+ `),1}return process.stdout.write(r?`${JSON.stringify(w)}
9
+ `:ot(w,{observed:!0,reason:null})),nt[w.status]}let s=re(t,"hash");if(!s)return process.stderr.write(`receipt: --hash required
10
10
  usage: ${this.usage}
11
- `),1;let a=K(t,"chain")??K(t,"chainId");if(!a)return process.stderr.write(`receipt: --chain <chainId> required to observe chain state
12
- `),1;let p=K(t,"confirmations"),d=p==null?1:Number(p);if(!Number.isSafeInteger(d)||d<=0)return process.stderr.write(`receipt: --confirmations must be a positive integer
13
- `),1;let f;try{f=await ze({txHash:s,chainId:a,confirmations:d,rpcUrl:K(t,"rpc-url")})}catch(h){return process.stderr.write(`receipt: ${h.message}
14
- `),1}let{receipt:u,observed:i,reason:c,final:l,requiredConfirmations:g}=f;return process.stdout.write(n?`${JSON.stringify({...u,observed:i,final:l,requiredConfirmations:g,...c?{notObserved:c}:{}})}
15
- `:Me(u,{observed:i,reason:c,final:l,requiredConfirmations:g})),De[u.status]}};export{jn as default};
11
+ `),1;let a=re(t,"chain")??re(t,"chainId");if(!a)return process.stderr.write(`receipt: --chain <chainId> required to observe chain state
12
+ `),1;let d=re(t,"confirmations"),u=d==null?1:Number(d);if(!Number.isSafeInteger(u)||u<=0)return process.stderr.write(`receipt: --confirmations must be a positive integer
13
+ `),1;let l;try{l=await rt({txHash:s,chainId:a,confirmations:u,rpcUrl:re(t,"rpc-url")})}catch(h){return process.stderr.write(`receipt: ${h.message}
14
+ `),1}let{receipt:i,observed:c,reason:f,final:p,requiredConfirmations:y}=l;return process.stdout.write(r?`${JSON.stringify({...i,observed:c,final:p,requiredConfirmations:y,...f?{notObserved:f}:{}})}
15
+ `:ot(i,{observed:c,reason:f,final:p,requiredConfirmations:y})),nt[i.status]}};export{hn as default};
@@ -1,7 +1,7 @@
1
- import{keccak_256 as G}from"@noble/hashes/sha3.js";import{createHash as Q}from"node:crypto";import v from"node:net";import ve from"node:dns";var _e=new Set(["localhost","metadata.google.internal","metadata.goog"]);function M(t){let e=String(t).toLowerCase().split("%")[0];if((e.match(/::/g)||[]).length>1)return null;let r=d=>{if(!d)return[];let s=d.split(":"),a=s.at(-1);if(a?.includes(".")){let u=a.split(".").map(Number);if(u.length!==4||u.some(g=>!Number.isInteger(g)||g<0||g>255))return null;s.splice(s.length-1,1,(u[0]<<8|u[1]).toString(16),(u[2]<<8|u[3]).toString(16))}return s.some(u=>!/^[0-9a-f]{1,4}$/.test(u))?null:s.map(u=>Number.parseInt(u,16))},[n,o]=e.split("::"),c=r(n),i=r(o);if(!c||!i)return null;let m=e.includes("::"),f=8-c.length-i.length;if(!m&&f!==0||m&&f<1)return null;let p=[...c,...Array(Math.max(0,f)).fill(0),...i];return p.length!==8?null:Uint8Array.from(p.flatMap(d=>[d>>8,d&255]))}function U(t,e,r){let n=Math.floor(r/8),o=r%8;for(let i=0;i<n;i+=1)if(t[i]!==e[i])return!1;if(!o)return!0;let c=255<<8-o;return(t[n]&c)===(e[n]&c)}function F(t){if(v.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(v.isIPv6(t)){let e=M(t);if(!e)return!1;let r=M("::ffff:0:0");return U(e,r,96)?F([...e.slice(12)].join(".")):U(e,M("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([o,c])=>U(e,M(o),c)):!1}return!1}function Te(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(_e.has(r)||r.endsWith(".localhost")||r.endsWith(".internal"))return{ok:!1,error:`refused internal host ${r}`};let n=v.isIP(r);return n!==0&&!F(r)?{ok:!1,error:`refused private address ${r}`}:{ok:!0,url:e,host:r,isLiteralIp:n!==0}}async function D(t,{lookupFn:e=ve.promises.lookup}={}){let r=Te(t);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 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=>!F(o.address))?{ok:!1,error:`refused: ${r.host} resolves to a non-public address`}:{ok:!0,url:r.url,addresses:n}}async function j({requireUndici:t=!1,importUndici:e=()=>import("undici")}={}){let r,n;try{let s=await e();r=s.Agent,n=s.fetch}catch(s){if(t)throw new Error(`egress-guard: untrustedUrl pinning requires the undici package, which failed to load: ${s?.message||s}`);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=s=>String(s).toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,""),c=new Map,i=s=>(Array.isArray(s)?s:[s]).map(a=>typeof a=="string"?{address:a}:a).filter(a=>a&&a.address).map(a=>({address:a.address,family:a.family||(v.isIPv6(a.address)?6:4)})),m=(s,a,u)=>{c.set(o(s),i(typeof a=="string"?[{address:a,family:u}]:a))},f=s=>{let a=o(s);if(v.isIP(a))return[{address:a,family:v.isIPv6(a)?6:4}];let u=c.get(a);if(!u||!u.length)throw new Error(`refused: unpinned host ${s} during pinned fetch`);return u},p=new r({connect:{lookup(s,a,u){let g;try{g=f(s)}catch(I){return u(I)}return a?.all?u(null,g):u(null,g[0].address,g[0].family)}}}),d=Ie((s,a={})=>n(s,{...a,dispatcher:p}),m);return{dispatcher:p,fetch:d,pin:m,resolve:f,async close(){try{await p.destroy()}catch{}}}}var z=Symbol.for("oracle.egressGuard.pinCapableFetch");function Ie(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[z]=Object.freeze({pin:e}),t}function J(t){return typeof t=="function"&&typeof t[z]?.pin=="function"}function Z(t,e,r){if(!J(t))throw new Error("pinFetchToAddresses: fetchImpl is not pin-capable");t[z].pin(e,r)}var Ce=new Set([408,425,429,500,502,503,504]),ee=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),Pe=2,te=4e3,ae=["authorization","x-api-key","x-tensor-api-key","0x-api-key","api-key","cookie","proxy-authorization"],ke=new Set([301,302,303,307,308]),re=3,$e=64*1024;function Ne(t){let e=String(t||"").toLowerCase();return ae.includes(e)||/(^|-)(api[-_]?key|key|token|secret|auth|authorization|session|cookie|signature|access)(-|$)/.test(e)}function Le(t){let e={};for(let[r,n]of Object.entries(t||{}))Ne(r)||(e[r]=n);return e}function He(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 Be(t,e){return new URL(String(t)).origin===new URL(String(e)).origin}var V=new Map,Me=/(?:^|_)(send|submit|broadcast|sign|requestAirdrop)(?=[A-Z_]|$)/i,Oe=new Set(["allMids","l2Book","outcomeMeta","spotClearinghouseState","userFills","meta","metaAndAssetCtxs","perpDexs","candleSnapshot","fundingHistory","openOrders","frontendOpenOrders","clearinghouseState","spotMeta","validatorSummaries","delegatorSummary","delegations","delegatorRewards","delegatorHistory","maxBuilderFee"]);function ne(t){let e=String(t?.method||"");return e?!Me.test(e):!1}function Ue(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}return Array.isArray(r)?r.length>0&&r.every(ne):!r||typeof r!="object"?!1:r.jsonrpc&&r.method?ne(r):typeof r.type=="string"&&Oe.has(r.type)&&r.action==null&&r.signature==null&&r.nonce==null}function Fe(t,e,r,n={},o=null){let c={};for(let[a,u]of Object.entries(r||{}))c[a.toLowerCase()]=u;let i=Object.keys(c).filter(a=>/(^|-)(api[-_]?key|key|token|secret|auth|authorization|session|cookie|signature|access)(-|$)/.test(a)),f=[...new Set([...ae,...i])].sort().map(a=>`${a}=${c[a]??""}`).join(`
2
- `),p=Q("sha256").update(f).digest("hex").slice(0,32),d=`${n.untrustedUrl?"untrusted":"trusted"}:${n.maxResponseBytes??"unbounded"}`,s=o==null?"-":Q("sha256").update(String(o)).digest("hex").slice(0,32);return`${t} ${e} ${d} ${p} ${s}`}function De(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 je=t=>new Promise(e=>setTimeout(e,t));function N(t,e={}){let r=new Error(t);return r.retryable=!1,Object.assign(r,e),r}function Y(t,e,r){return N(`HTTP response from ${t} exceeded maxResponseBytes ${r} (${e})`,{oversize:!0})}function L(t){try{let e=t?.body?.cancel?.();e&&typeof e.then=="function"&&e.catch(()=>{})}catch{}}function ze(t){return t?t.byteLength??t.length??0:0}async function oe(t,e,{url:r,truncate:n=!1,onOversize:o}={}){if(e==null)return await t.text();let c=Number(t.headers?.get?.("content-length"));if(Number.isFinite(c)&&c>e&&(L(t),!n))throw Y(r,`content-length ${c}`,e);let i=t.body?.getReader?.();if(!i){let s=await t.text(),a=Buffer.byteLength(s,"utf8");if(a>e){if(!n)throw Y(r,`body ${a} bytes`,e);return Buffer.from(s,"utf8").subarray(0,e).toString("utf8")}return s}let m=[],f=0,p=!1;try{for(;;){let{value:s,done:a}=await i.read();if(a)break;if(s&&(m.push(Buffer.from(s)),f+=ze(s),f>e)){p=!0;break}}}finally{if(p)try{await i.cancel()}catch{}try{i.releaseLock?.()}catch{}}if(p&&(typeof o=="function"&&o(),!n))throw Y(r,`streamed ${f} bytes`,e);let d=Buffer.concat(m);return(p?d.subarray(0,e):d).toString("utf8")}function se(t){if(!t)return null;try{return JSON.parse(t)}catch{return null}}async function Je(t,{fetchImpl:e,method:r,headers:n,body:o,timeoutMs:c,lookupFn:i,realFetch:m,untrustedUrl:f=!1,maxResponseBytes:p=null,importUndici:d,validateResponse:s,signal:a}){let u=new AbortController,g=setTimeout(()=>u.abort(),c),I=a?typeof AbortSignal.any=="function"?AbortSignal.any([a,u.signal]):a:u.signal,w=null,C=e,P=i?{lookupFn:i}:{};if(f&&!m&&!J(C))throw N(`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 k=async(h,{status:b=null}={})=>{let y=await D(h,P);if(!y.ok)throw N(b==null?`HTTP refused ${h}: ${y.error}`:`HTTP redirect to ${h} ${y.error}`,b==null?{}:{status:b});let l=new URL(h).hostname;if(m){if(w&&(await w.close(),w=null),!w)try{w=await j({requireUndici:!0,...d?{importUndici:d}:{}})}catch(E){throw N(b==null?`HTTP refused ${h}: ${E?.message||E}`:`HTTP redirect to ${h} refused: ${E?.message||E}`,b==null?{}:{status:b})}w.pin(l,y.addresses),C=w.fetch}else Z(C,l,y.addresses);return y};try{let h=String(t),b={...n||{}};f&&await k(h);for(let y=0;y<=re;y+=1){let l=await C(h,{method:r,headers:b,body:o,signal:I,redirect:"manual"});if(ke.has(l.status)){if(r!=="GET"&&r!=="HEAD"){let R=await oe(l,p??$e,{url:h,truncate:!0}),A=new Error(`HTTP ${l.status} ${r} ${h} redirected non-idempotent request`);throw A.status=l.status,A.body=se(R)??R.slice(0,300),A}if(y===re)throw L(l),new Error(`HTTP redirect loop for ${t}`);let S=l.headers?.get?.("location"),x;try{x=He(S,h)}catch(R){throw L(l),R}let $=!Be(x,h);if(L(l),$&&(b=Le(b)),f)await k(x,{status:l.status});else if($){let R=await D(x,P);if(!R.ok){let A=new Error(`HTTP redirect from ${h} ${R.error}`);throw A.status=l.status,A.retryable=!1,A}m&&R.addresses?.length&&(w||(w=await j(d?{importUndici:d}:{})),w&&(w.pin(new URL(x).hostname,R.addresses),C=w.fetch))}h=x;continue}if(typeof s=="function")try{await s(l,{url:h})}catch(S){throw L(l),N(S?.message||String(S))}let E=await oe(l,p,{url:h,onOversize:()=>u.abort()}),B=se(E);if(!l.ok){let S=new Error(`HTTP ${l.status} ${r} ${h}`);throw S.status=l.status,S.retryAfter=l.headers?.get?.("retry-after")??null,S.body=B??E.slice(0,300),S}return B??E}throw new Error(`HTTP redirect loop for ${t}`)}finally{clearTimeout(g),w&&await w.close()}}async function ce(t,e={}){let r=e.fetchImpl||globalThis.fetch;if(typeof r!="function")throw new Error("fetch unavailable \u2014 pass opts.fetchImpl");let n=e.timeoutMs??12e3,o=(e.method||"GET").toUpperCase(),c={Accept:"application/json",...e.headers||{}},i=e.body;i!=null&&typeof i!="string"&&(c["Content-Type"]=c["Content-Type"]||"application/json",i=JSON.stringify(i));let m=Number.isInteger(e.retries)?Math.max(e.retries,0):Pe,f=e.lookupFn,p=!e.fetchImpl,d=e.untrustedUrl===!0,s=e.importUndici,a=e.validateResponse,u=e.signal,g=Number(e.maxResponseBytes),I=Number.isFinite(g)&&g>0?Math.floor(g):null,w=async()=>{let b;for(let y=0;y<=m;y++){u?.throwIfAborted?.();try{return await Je(t,{fetchImpl:r,method:o,headers:c,body:i,timeoutMs:n,lookupFn:f,realFetch:p,untrustedUrl:d,maxResponseBytes:I,importUndici:s,validateResponse:a,signal:u})}catch(l){b=l;let E=l?.status,B=l?.name==="AbortError"||l?.name==="TimeoutError"||u?.aborted,S=new Set([408,425,429]),x=l?.retryable===!1?!1:E!=null?S.has(E)||Ce.has(E)&&ee.has(o):!B&&ee.has(o);if(y===m||!x)throw l;let $=De(y,l?.retryAfter);u?await new Promise((R,A)=>{let xe=setTimeout(R,$);u.addEventListener("abort",()=>{clearTimeout(xe),A(u.reason||new DOMException("Aborted","AbortError"))},{once:!0})}):await je($)}}throw b};if(!(e.dedupe!==!1&&!u&&Ue(o,i)))return w();let P=Fe(o,t,c,{untrustedUrl:d,maxResponseBytes:I},i),k=V.get(P);if(k)return k;let h=w().finally(()=>V.delete(P));return V.set(P,h),h}var ie={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}},Ve=new Map(Object.values(ie).map(t=>[t.chainId,t]));function ue(t){return Ve.get(Number(t))||null}function le(t,e=process.env){let r=ue(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 Ye,getAddress as At}from"ethers";var xt=new Ye(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);var Ge={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 qe(t,{rpcUrl:e,env:r=process.env}={}){if(e)return e;let n=le(t,r);return n||Ge[Number(t)]||null}var We=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/;function Ke(t){let e=String(t||""),r=e.toLowerCase();if(e!==e.trim()||!/^[a-zA-Z0-9_]+$/.test(e)||!We.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 H=new Map,fe=new Map;function Xe(t){let e=new Error(t?.message||JSON.stringify(t));return e.code=t?.code,e}function Ze(t){if(t?.error)throw Xe(t.error);return t?.result}function Qe(t,e,r){return`${t}
1
+ import{keccak_256 as ue}from"@noble/hashes/sha3.js";import{createHash as qe}from"node:crypto";import{types as k}from"node:util";import B from"node:net";import Je from"node:dns";var Ve=new Set(["localhost","metadata.google.internal","metadata.goog"]);function Y(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 ee(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 te(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=Y(t);if(!e)return!1;let r=Y("::ffff:0:0");return ee(e,r,96)?te([...e.slice(12)].join(".")):ee(e,Y("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([s,i])=>ee(e,Y(s),i)):!1}return!1}function We(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(Ve.has(r)||r.endsWith(".localhost")||r.endsWith(".internal"))return{ok:!1,error:`refused internal host ${r}`};let n=B.isIP(r);return n!==0&&!te(r)?{ok:!1,error:`refused private address ${r}`}:{ok:!0,url:e,host:r,isLiteralIp:n!==0}}async function re(t,{lookupFn:e=Je.promises.lookup}={}){let r=We(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=>!te(s.address))?{ok:!1,error:`refused: ${r.host} resolves to a non-public address`}:{ok:!0,url:r.url,addresses:n}}async function ne({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(P){return h(P)}return l?.all?h(null,m):h(null,m[0].address,m[0].family)}}}),o=Ye((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 oe=Symbol.for("oracle.egressGuard.pinCapableFetch");function Ye(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[oe]=Object.freeze({pin:e}),t}function se(t){return typeof t=="function"&&typeof t[oe]?.pin=="function"}function ye(t,e,r){if(!se(t))throw new Error("pinFetchToAddresses: fetchImpl is not pin-capable");t[oe].pin(e,r)}var Ke=new Set([408,425,429,500,502,503,504]),we=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),Ze=2,be=4e3,Xe=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"aborted")?.get,Qe=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"reason")?.get,et=AbortSignal.prototype.throwIfAborted,tt=EventTarget.prototype.addEventListener,ge=typeof AbortSignal.any=="function"?AbortSignal.any.bind(AbortSignal):null,ce=t=>t?Xe.call(t):!1,rt=t=>t?Qe.call(t):void 0,nt=new Set([301,302,303,307,308]),K=3,Vt=64*1024,N=Object.freeze({depth:32,nodes:1e4,fields:1e4,arrayLength:1e4,bytes:1024*1024});function T(t){return j(`HTTP JSON body refused: ${t}`)}function ot(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 st(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(ot(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),P=0;for(;m!==null;){if(k.isProxy(m))throw T("proxy array prototype");if(P+=1,P>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 A=0;A<o.length;A+=1){let $=Object.getOwnPropertyDescriptor(o,String(A));if(!$||!Object.hasOwn($,"value")||$.enumerable!==!0)throw T("array entries must be dense enumerable own data")}let R=0;for(let A in o){if(i+=1,i>N.fields)throw T("enumeration limit exceeded");if(Object.hasOwn(o,A)&&(R+=1,R>o.length))throw T("named array fields are unsupported")}if(R!==o.length)throw T("array entries must be dense enumerable own data");d("[");for(let A=0;A<o.length;A+=1)A&&d(","),p(Object.getOwnPropertyDescriptor(o,String(A)).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 P=Object.getOwnPropertyDescriptor(o,m);if(!P||!Object.hasOwn(P,"value")||P.enumerable!==!0)throw T("object fields must be enumerable own data");h.push([m,P.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 at(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 it(){return Object.assign(Object.create(null),{Accept:"application/json"})}function ct(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 ut(t,e){return new URL(String(t)).origin===new URL(String(e)).origin}var ae=new Map,Te=new WeakMap,Ee=1;function q(t){if((typeof t!="object"||t===null)&&typeof t!="function")return`${typeof t}:${String(t)}`;let e=Te.get(t);return e||(e=Ee,Ee+=1,Te.set(t,e)),`reference:${e}`}var lt=new Set(["eth_blockNumber","eth_call","eth_chainId","eth_estimateGas","getHealth","minimumLedgerSlot","net_version","simulateTransaction","web3_clientVersion"]),ft=new Set(["allMids","l2Book","outcomeMeta","spotClearinghouseState","userFills","meta","metaAndAssetCtxs","perpDexs","candleSnapshot","fundingHistory","openOrders","frontendOpenOrders","clearinghouseState","spotMeta","validatorSummaries","delegatorSummary","delegations","delegatorRewards","delegatorHistory","maxBuilderFee"]);function Oe(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?lt.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 Se(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(Oe);if(!r||typeof r!="object")return!1;if(Object.hasOwn(r,"jsonrpc")||Object.hasOwn(r,"method"))return Oe(r);let n=Object.hasOwn(r,"type")?r.type:null;return typeof n=="string"&&ft.has(n)&&(!Object.hasOwn(r,"action")||r.action==null)&&(!Object.hasOwn(r,"signature")||r.signature==null)&&(!Object.hasOwn(r,"nonce")||r.nonce==null)}function dt(t,e,r,n={},s=null){let i=qe("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 pt(t,e){let r=Number(e);return Number.isFinite(r)&&r>0?Math.min(r*1e3,be):Math.min(250*2**t,be)+Math.floor(Math.random()*100)}var ht=t=>new Promise(e=>setTimeout(e,t));function j(t,e={}){let r=new Error(t);return r.retryable=!1,Object.assign(r,e),r}function ie(t,e,r){return j(`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 mt(t){return t?t.byteLength??t.length??0:0}async function yt(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 ie(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 ie(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+=mt(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 ie(r,`streamed ${u} bytes`,e);let o=Buffer.concat(d);return(p?o.subarray(0,e):o).toString("utf8")}function wt(t){if(!t)return null;try{return JSON.parse(t)}catch{return null}}async function bt(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:P=K}){let R=new AbortController,A=setTimeout(()=>R.abort(),i),$=h?ge?ge([h,R.signal]):h:R.signal,g=null,x=e,F=c?{lookupFn:c}:{};if(u&&!d&&!se(x))throw j(`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 G=async(y,{status:O=null}={})=>{let S=await re(y,F);if(!S.ok)throw j(O==null?`HTTP refused ${y}: ${S.error}`:`HTTP redirect to ${y} ${S.error}`,O==null?{}:{status:O});let C=new URL(y).hostname;if(d){if(g&&(await g.close(),g=null),!g)try{g=await ne({requireUndici:!0,...a?{importUndici:a}:{}})}catch(f){throw j(O==null?`HTTP refused ${y}: ${f?.message||f}`:`HTTP redirect to ${y} refused: ${f?.message||f}`,O==null?{}:{status:O})}g.pin(C,S.addresses),x=g.fetch}else ye(x,C,S.addresses);return S};try{let y=String(t),O=Object.assign(Object.create(null),n||{});u&&await G(y);for(let S=0;S<=P;S+=1){let C=Object.assign(Object.create(null),{method:r,headers:O,body:s,signal:$,redirect:"manual",dispatcher:void 0}),f=await x(y,C);if((m==="error"||P===0)&&f.status>=300&&f.status<400)throw M(f),j(`HTTP ${f.status} ${r} redirect refused`,{status:f.status,redirectRefused:!0});if(nt.has(f.status)){let _=o===!0&&r==="POST"&&[307,308].includes(f.status)&&Se(r,s);if(r!=="GET"&&r!=="HEAD"&&!_){M(f);let E=new Error(`HTTP ${f.status} ${r} ${y} redirected non-idempotent request`);throw E.status=f.status,E}if(S===P)throw M(f),j(`HTTP ${f.status} ${r} redirect budget exhausted`,{status:f.status,redirectRefused:!0});let he=f.headers?.get?.("location"),I;try{I=ct(he,y)}catch(E){throw M(f),E}let H=!ut(I,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&&(O=it(O)),u)await G(I,{status:f.status});else if(H){let E=await re(I,F);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 ne(a?{importUndici:a}:{})),g&&(g.pin(new URL(I).hostname,E.addresses),x=g.fetch))}y=I;continue}if(typeof l=="function")try{await l(f,{url:y})}catch(_){throw M(f),j(_?.message||String(_))}let v=await yt(f,p,{url:y,onOversize:()=>R.abort()}),J=wt(v);if(!f.ok){let _=new Error(`HTTP ${f.status} ${r} ${y}`);throw _.status=f.status,_.retryAfter=f.headers?.get?.("retry-after")??null,_.body=J??v.slice(0,300),_}return J??v}throw new Error(`HTTP redirect loop for ${t}`)}catch(y){if(R.signal.aborted&&!ce(h)){let O=y&&(typeof y=="object"||typeof y=="function")&&!k.isProxy(y)?y:null,S=O?Object.getOwnPropertyDescriptor(O,"oversize"):null;if(!(S&&Object.hasOwn(S,"value")&&S.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(A),g&&await g.close()}}async function Pe(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 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 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>K))throw new TypeError(`HTTP maxRedirects must be an integer from 0 through ${K}`);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??K;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(k.isProxy(l)||!(l instanceof AbortSignal))throw new TypeError("HTTP signal must be a native AbortSignal");try{ce(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 P=i??12e3,R=(s||"GET").toUpperCase(),A=n("headers"),$=at(A),g=Object.assign(Object.create(null),$);Object.keys(g).some(b=>b.toLowerCase()==="accept")||(g.Accept="application/json");let x=n("body");x!=null&&typeof x!="string"&&(Object.keys(g).find(w=>w.toLowerCase()==="content-type")||(g["Content-Type"]="application/json"),x=st(x));let F=c??Ze,G=n("lookupFn"),y=!h,O=n("untrustedUrl")===!0,S=n("sameOriginRedirectsOnly")===!0,C=n("importUndici"),f=n("validateResponse"),v=l,J=a??null,_=async()=>{let b;for(let w=0;w<=F;w++){v&&et.call(v);try{return await bt(t,{fetchImpl:m,method:R,headers:g,body:x,timeoutMs:P,lookupFn:G,realFetch:y,untrustedUrl:O,maxResponseBytes:J,sameOriginRedirectsOnly:S,importUndici:C,validateResponse:f,signal:v,redirectPolicy:p,maxRedirects:o})}catch(L){b=L;let z=Q=>{if(!L||typeof L!="object"&&typeof L!="function"||k.isProxy(L))return;let V=Object.getOwnPropertyDescriptor(L,Q);return V&&Object.hasOwn(V,"value")?V.value:void 0},X=z("status"),De=z("oracleTimeout")===!0||z("name")==="AbortError"||z("name")==="TimeoutError"||ce(v),Fe=new Set([408,425,429]),ze=z("retryable")===!1?!1:X!=null?Fe.has(X)||Ke.has(X)&&we.has(R):!De&&we.has(R);if(w===F||!ze)throw L;let me=pt(w,z("retryAfter"));v?await new Promise((Q,V)=>{let Ge=setTimeout(Q,me);tt.call(v,"abort",()=>{clearTimeout(Ge),V(rt(v)||new DOMException("Aborted","AbortError"))},{once:!0})}):await ht(me)}}throw b};if(!(n("dedupe")!==!1&&!v&&Se(R,x)))return _();let I=dt(R,t,g,{untrustedUrl:O,maxResponseBytes:J,sameOriginRedirectsOnly:S,redirectPolicy:p,maxRedirects:o,timeoutMs:P,retries:F,fetchImpl:q(m),realFetch:y,lookupFn:q(G),importUndici:q(C),validateResponse:q(f)},x),H=ae.get(I);if(H)return H;let E=_().finally(()=>ae.delete(I));return ae.set(I,E),E}var Re={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}},gt=new Map(Object.values(Re).map(t=>[t.chainId,t]));function Ae(t){return gt.get(Number(t))||null}function xe(t,e=process.env){let r=Ae(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 Tt,getAddress as Qt}from"ethers";var er=new Tt(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);var Et={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 Ot(t,{rpcUrl:e,env:r=process.env}={}){if(e)return e;let n=xe(t,r);return n||Et[Number(t)]||null}var St=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/;function Pt(t){let e=String(t||""),r=e.toLowerCase();if(e!==e.trim()||!/^[a-zA-Z0-9_]+$/.test(e)||!St.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 W=new Map,ve=new Map;function Rt(t){let e=new Error(t?.message||JSON.stringify(t));return e.code=t?.code,e}function At(t){if(t?.error)throw Rt(t.error);return t?.result}function xt(t,e,r){return`${t}
3
3
  ${e}
4
- ${JSON.stringify(r??[])}`}async function et(t,e,r){return ce(t,{method:"POST",body:e,fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3,signal:r.signal})}async function de(t,e,r=[],n={}){let o=String(e||""),c=Ke(o),i=qe(t,n);if(!i)throw new Error(`No RPC URL for chainId ${t} (set env from chain registry rpcEnv or pass rpcUrl)`);if(c==="eth_chainid"&&n.cacheChainId!==!1){let d=fe.get(i);if(d!=null)return d}let f=n.dedupe!==!1&&!n.signal?Qe(i,o,r):null;if(f&&H.has(f))return H.get(f);let p=(async()=>{let d=await et(i,{jsonrpc:"2.0",id:1,method:e,params:r},n),s=Ze(d);return c==="eth_chainid"&&typeof s=="string"&&fe.set(i,s),s})();return f&&(H.set(f,p),p.finally(()=>{H.get(f)===p&&H.delete(f)}).catch(()=>{})),p}var W=999,q=1,tt=8453,pe="0x1d9d87eBc14e71490bB87f1C39F65BDB979f3cb7",rt="0x4d5e4ed4D5e4A160Fa136853597cDc2eBBe66494",he="0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",nt="0xC6d566A56A1aFf6508b41f6c90ff131615583BCD",ot=".80002105.reverse",K=/^0x[a-fA-F0-9]{40}$/,me=new TextEncoder,we=t=>"0x"+Buffer.from(t).toString("hex"),_=t=>we(G(me.encode(t))).slice(0,10),ye=t=>t.toLowerCase().replace(/^0x/,"").padStart(64,"0");function O(t){let e=new Uint8Array(32);if(t)for(let r of String(t).split(".").reverse()){let n=G(me.encode(r)),o=new Uint8Array(64);o.set(e,0),o.set(n,32),e=G(o)}return we(e)}function X(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 T(t,e,r){try{return await de(t,"eth_call",[{to:e,data:r},"latest"])}catch{return null}}async function st(t){let e=await T(W,pe,_("primaryName(address)")+ye(t)),r=X(e);return r?r.endsWith(".hl")?r:`${r}.hl`:null}async function at(t){let e=await T(W,rt,_("getName(address)")+ye(t)),r=X(e);return r?r.endsWith(".hype")?r:`${r}.hype`:null}async function ge(t,e,r){let n=await T(t,r,_("name(bytes32)")+e.slice(2));return X(n)||null}async function ct(t){let e=O(`${t.slice(2).toLowerCase()}.addr.reverse`),r=await T(q,he,_("resolver(bytes32)")+e.slice(2));if(!r)return null;let n="0x"+r.slice(-40);return/^0x0+$/.test(n)?null:ge(q,e,n)}async function it(t){let e=O(t.slice(2).toLowerCase()+ot);return ge(tt,e,nt)}var be=[{source:"hl",fn:st},{source:"hype",fn:at},{source:"ens",fn:ct},{source:"basename",fn:it}];async function Ee(t){if(!K.test(String(t||"").trim()))return null;let e=String(t).trim();return(await Promise.all(be.map(async({source:n,fn:o})=>{try{let c=await o(e);return c?{name:c,source:n,address:e}:null}catch{return null}}))).find(Boolean)||null}async function ut(t){let e=O(t),r=await T(W,pe,_("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 lt(t,e,r){let n=O(e),o=await T(t,r,_("resolver(bytes32)")+n.slice(2));if(!o)return null;let c="0x"+o.slice(-40);if(/^0x0+$/.test(c))return null;let i=await T(t,c,_("addr(bytes32)")+n.slice(2));if(!i)return null;let m="0x"+i.slice(-40);return/^0x0+$/.test(m)?null:m}async function Se(t){let e=String(t||"").trim().toLowerCase();if(!e||!e.includes("."))return null;if(e.endsWith(".hl")){let r=await ut(e);return r?{address:r,source:"hl",name:e}:null}if(e.endsWith(".eth")){let r=await lt(q,e,he);return r?{address:r,source:e.endsWith(".base.eth")?"basename":"ens",name:e}:null}return null}var Re=be.map(t=>t.source);var Ae=`oracle resolve <name-or-address> [--json]
4
+ ${JSON.stringify(r??[])}`}async function vt(t,e,r){return Pe(t,{method:"POST",body:e,fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3,signal:r.signal})}async function _e(t,e,r=[],n={}){let s=String(e||""),i=Pt(s),c=Ot(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=ve.get(c);if(o!=null)return o}let u=n.dedupe!==!1&&!n.signal?xt(c,s,r):null;if(u&&W.has(u))return W.get(u);let p=(async()=>{let o=await vt(c,{jsonrpc:"2.0",id:1,method:e,params:r},n),a=At(o);return i==="eth_chainid"&&typeof a=="string"&&ve.set(c,a),a})();return u&&(W.set(u,p),p.finally(()=>{W.get(u)===p&&W.delete(u)}).catch(()=>{})),p}var fe=999,le=1,_t=8453,Ie="0x1d9d87eBc14e71490bB87f1C39F65BDB979f3cb7",It="0x4d5e4ed4D5e4A160Fa136853597cDc2eBBe66494",Ne="0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",Nt="0xC6d566A56A1aFf6508b41f6c90ff131615583BCD",kt=".80002105.reverse",de=/^0x[a-fA-F0-9]{40}$/,ke=new TextEncoder,Ce=t=>"0x"+Buffer.from(t).toString("hex"),U=t=>Ce(ue(ke.encode(t))).slice(0,10),je=t=>t.toLowerCase().replace(/^0x/,"").padStart(64,"0");function Z(t){let e=new Uint8Array(32);if(t)for(let r of String(t).split(".").reverse()){let n=ue(ke.encode(r)),s=new Uint8Array(64);s.set(e,0),s.set(n,32),e=ue(s)}return Ce(e)}function pe(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 _e(t,"eth_call",[{to:e,data:r},"latest"])}catch{return null}}async function Ct(t){let e=await D(fe,Ie,U("primaryName(address)")+je(t)),r=pe(e);return r?r.endsWith(".hl")?r:`${r}.hl`:null}async function jt(t){let e=await D(fe,It,U("getName(address)")+je(t)),r=pe(e);return r?r.endsWith(".hype")?r:`${r}.hype`:null}async function $e(t,e,r){let n=await D(t,r,U("name(bytes32)")+e.slice(2));return pe(n)||null}async function $t(t){let e=Z(`${t.slice(2).toLowerCase()}.addr.reverse`),r=await D(le,Ne,U("resolver(bytes32)")+e.slice(2));if(!r)return null;let n="0x"+r.slice(-40);return/^0x0+$/.test(n)?null:$e(le,e,n)}async function Ht(t){let e=Z(t.slice(2).toLowerCase()+kt);return $e(_t,e,Nt)}var He=[{source:"hl",fn:Ct},{source:"hype",fn:jt},{source:"ens",fn:$t},{source:"basename",fn:Ht}];async function Le(t){if(!de.test(String(t||"").trim()))return null;let e=String(t).trim();return(await Promise.all(He.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 Lt(t){let e=Z(t),r=await D(fe,Ie,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 Bt(t,e,r){let n=Z(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 Be(t){let e=String(t||"").trim().toLowerCase();if(!e||!e.includes("."))return null;if(e.endsWith(".hl")){let r=await Lt(e);return r?{address:r,source:"hl",name:e}:null}if(e.endsWith(".eth")){let r=await Bt(le,e,Ne);return r?{address:r,source:e.endsWith(".base.eth")?"basename":"ens",name:e}:null}return null}var Me=He.map(t=>t.source);var Ue=`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 et(t,e,r){return ce(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: ${Re.join(", ")}.`;async function ft(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(Ae+`
14
- `),n?0:1;try{if(K.test(n)){let c=await Ee(n);return r?(process.stdout.write(JSON.stringify({address:n,name:c?.name??null,source:c?.source??null})+`
15
- `),0):c?(process.stdout.write(`${n}
16
- ${c.name} [${c.source}]
13
+ Sources, in priority order: ${Me.join(", ")}.`;async function Mt(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(Ue+`
14
+ `),n?0:1;try{if(de.test(n)){let i=await Le(n);return r?(process.stdout.write(JSON.stringify({address:n,name:i?.name??null,source:i?.source??null})+`
15
+ `),0):i?(process.stdout.write(`${n}
16
+ ${i.name} [${i.source}]
17
17
  `),0):(process.stdout.write(`${n}
18
18
  no name record found
19
- `),0)}let o=await Se(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}]
19
+ `),0)}let s=await Be(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}]
22
22
  `),0):(process.stdout.write(`${n}
23
23
  unresolved (no owner record)
24
- `),0)}catch(o){return process.stderr.write(`resolve failed: ${o?.message||o}
25
- `),1}}var Pt={name:"resolve",summary:"resolve .hl/.hype/.eth names to addresses and back",usage:Ae,async run(t){return ft(t.argv||[])}};export{Pt as default};
24
+ `),0)}catch(s){return process.stderr.write(`resolve failed: ${s?.message||s}
25
+ `),1}}var ar={name:"resolve",summary:"resolve .hl/.hype/.eth names to addresses and back",usage:Ue,async run(t){return Mt(t.argv||[])}};export{ar as default};