@oracle-agent/oracle 0.35.49 → 0.35.50

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 (81) hide show
  1. package/README.md +3 -2
  2. package/artifacts/specialist-packs/oracle-full-crypto.json +11 -0
  3. package/dist/agent-sessions.mjs +19 -19
  4. package/dist/artifacts/token-dashboard.mjs +1 -1
  5. package/dist/assets/profiles/near-agent/SOUL.md +46 -0
  6. package/dist/assets/profiles/near-agent/profile.json +30 -0
  7. package/dist/assets/profiles/oracle/SOUL.md +1 -0
  8. package/dist/assets/skills/oracle-desk-product/SKILL.md +1 -1
  9. package/dist/assets/skills/oracle-near/SKILL.md +66 -0
  10. package/dist/automation-plan.mjs +1 -1
  11. package/dist/bin/desk-server.mjs +33 -33
  12. package/dist/bin/oracle-data-mcp.mjs +16 -16
  13. package/dist/bin/oracle-gateway.mjs +3 -3
  14. package/dist/bin/oracle-launch-radar-shadow.mjs +3 -3
  15. package/dist/bin/oracle-mev-arb-shadow.mjs +4 -4
  16. package/dist/bin/oracle-mev-shadow.mjs +4 -4
  17. package/dist/bin/oracle-public-server.mjs +5 -5
  18. package/dist/bin/oracle-route.mjs +27 -27
  19. package/dist/bin/oracle-scan.mjs +3 -3
  20. package/dist/bin/oracle-telegram-mcp.mjs +1 -1
  21. package/dist/chains.mjs +1 -1
  22. package/dist/cli/commands/account.mjs +22 -22
  23. package/dist/cli/commands/agent-session.mjs +23 -23
  24. package/dist/cli/commands/auth.mjs +16 -15
  25. package/dist/cli/commands/chain.mjs +5 -5
  26. package/dist/cli/commands/chat.mjs +310 -228
  27. package/dist/cli/commands/data.mjs +37 -37
  28. package/dist/cli/commands/doctor.mjs +5 -5
  29. package/dist/cli/commands/eval.mjs +249 -167
  30. package/dist/cli/commands/farm.mjs +1 -1
  31. package/dist/cli/commands/follow.mjs +4 -4
  32. package/dist/cli/commands/harness.mjs +6 -6
  33. package/dist/cli/commands/mint.mjs +11 -11
  34. package/dist/cli/commands/model.mjs +313 -231
  35. package/dist/cli/commands/project.mjs +8 -7
  36. package/dist/cli/commands/quickstart.mjs +2 -2
  37. package/dist/cli/commands/receipt.mjs +2 -2
  38. package/dist/cli/commands/resolve.mjs +4 -4
  39. package/dist/cli/commands/session-vault.mjs +4 -4
  40. package/dist/cli/commands/setup.mjs +53 -52
  41. package/dist/cli/commands/snipe.mjs +13 -13
  42. package/dist/cli/commands/strategy.mjs +5 -5
  43. package/dist/cli/commands/swap.mjs +11 -11
  44. package/dist/cli/commands/telegram.mjs +7 -7
  45. package/dist/cli/commands/venues.mjs +1 -1
  46. package/dist/cli/project-access.mjs +4 -3
  47. package/dist/data/desk-data.mjs +31 -31
  48. package/dist/data/holder-table.mjs +2 -2
  49. package/dist/data/market-tape.mjs +1 -1
  50. package/dist/data/names.mjs +3 -3
  51. package/dist/data/providers/farming.mjs +2 -2
  52. package/dist/data/providers/lp-destination-discovery.mjs +4 -4
  53. package/dist/index.mjs +49 -49
  54. package/dist/launch-radar/index.mjs +5 -5
  55. package/dist/lp/index.mjs +4 -4
  56. package/dist/nft/universal-mint-router.mjs +4 -4
  57. package/dist/notifications/index.mjs +1 -1
  58. package/dist/router/index.mjs +3 -3
  59. package/dist/router/prepare-bridge.mjs +2 -2
  60. package/dist/router/prepare-route.mjs +3 -3
  61. package/dist/scanner/index.mjs +3 -3
  62. package/dist/strategy/index.mjs +4 -4
  63. package/dist/task.mjs +1 -1
  64. package/dist/teams/index.mjs +6 -6
  65. package/dist/telegram/chart-card.mjs +5 -5
  66. package/dist/telegram/market-commands.mjs +1 -1
  67. package/dist/tui/standalone-client.mjs +179 -97
  68. package/package.json +2 -2
  69. package/public/oracle-splash/docs/browser-and-web/index.html +2 -2
  70. package/public/oracle-splash/docs/connectors/index.html +2 -2
  71. package/public/oracle-splash/docs/getting-started/index.html +2 -2
  72. package/public/oracle-splash/docs/index.html +3 -3
  73. package/public/oracle-splash/docs/reference/index.html +2 -2
  74. package/public/oracle-splash/docs/security/index.html +2 -2
  75. package/public/oracle-splash/docs/using-oracle/index.html +2 -2
  76. package/public/oracle-splash/download/index.html +3 -3
  77. package/public/oracle-splash/downloads/index.html +1 -1
  78. package/public/oracle-splash/eval/index.html +19 -19
  79. package/public/oracle-splash/eval/releases/oracle-0.35.49.json +852 -0
  80. package/public/oracle-splash/index.html +9 -9
  81. package/server.json +2 -2
@@ -1,5 +1,5 @@
1
- import{wordlists as mt}from"ethers";var yt=new Set(["privatekey","privkey","secretkey","seedphrase","seed","mnemonic","passphrase","password","keystore","keymaterial","wif","xprv","xpriv","bearer","authorization","signature","apikey","credential"]),bt=[/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/,/\bxprv[0-9A-Za-z]{50,}\b/],wt=new Set([12,15,18,21,24]);function gt(e){let t=String(e).trim().toLowerCase().split(/\s+/).filter(Boolean);return wt.has(t.length)&&t.every(r=>mt.en.getWordIndex(r)>=0)}var Et=/^\s*(?:0x)?[0-9a-fA-F]{64}\s*$/,St=/(hash|digest|root|salt|nonce|proof|commitment|sig|id)(?:e?s)?$/i,At=new Set(["calldata","data","publickey","pubkey","message","payload","input","extradata"]);function xt(e){let t=Ue(e);return At.has(t)||St.test(t)}var Z=class extends Error{constructor(t){super(`action receipt refused: secret-bearing field at ${t}`),this.name="ActionReceiptSecretError",this.code="ACTION_RECEIPT_SECRET"}};function Ue(e){return String(e).replace(/[^a-z0-9]/gi,"").toLowerCase()}function Tt(e){let t=Ue(e);return[...yt].some(r=>t.includes(r))}function Ot(e,t,r){if(typeof t=="string"){if(bt.some(o=>o.test(t))||gt(t))throw new Z(r);if(Et.test(t)&&!xt(e))throw new Z(r)}}function pe(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string")return Ot(r,e,t),e;if(typeof e=="number"){if(!Number.isFinite(e))throw new TypeError(`action receipt: non-finite number at ${t}`);return e}if(typeof e=="bigint")return e.toString();if(Array.isArray(e))return e.map((n,s)=>pe(n,`${t}[${s}]`,r));if(typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`action receipt: JSON-like value required at ${t}`);let o={};for(let n of Object.keys(e).sort()){let s=`${t}.${n}`;if(Tt(n))throw new Z(s);e[n]!==void 0&&(o[n]=pe(e[n],s,n))}return o}function ve(e){return pe(e)}var Lr=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),Hr=Object.freeze(["read","simulate"]);var Mr=1440*60;var L=class extends Error{constructor(t,r){super(`secret material must never appear in a public API object (at ${t}, rule: ${r})`),this.name="SecretLeakError",this.path=t,this.rule=r}},It=/(private[_-]?key|secret|bearer|keystore|mnemonic|seed[_-]?phrase|passphrase|password|api[_-]?key|access[_-]?token|auth[_-]?token|session[_-]?token|signer[_-]?url|signature)/i,Nt=Object.freeze(["privkey","wif","xprv","seed"]);function he(e){let t=String(e),r=t.toLowerCase().replace(/[\s._-]+/g,"");return It.test(t)||Nt.includes(r)}var Fe=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}]),De=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"]);function Rt(e){return e.replace(/"([A-Za-z0-9_-]+)"\s*:\s*"(?:0x)?([0-9a-fA-F]{64})"/g,(t,r)=>De.includes(String(r).toLowerCase().replace(/[_-]/g,""))?`"${r}":"<hex64>"`:t)}function ze(e){let t;try{t=JSON.stringify(e)}catch(n){throw new L("$",`unserializable-payload: ${String(n?.message||n)}`)}if(t===void 0)return"null";let r=Rt(t);for(let{rule:n,re:s}of Fe)if(s.test(r))throw new L("$<serialized>",n);if(/(?:^|[^0-9a-fA-Fx])0x[0-9a-fA-F]{64}(?![0-9a-fA-F])/.test(r))throw new L("$<serialized>","raw-32-byte-hex-embedded");return JSON.parse(t,(n,s)=>{if(n&&he(n))throw new L(`$<serialized>.${n}`,"forbidden-key-name");return s}),t}function z(e,t="$",r=new Set,o=""){if(e==null)return e;if(typeof e=="string"){let n=De.includes(String(o).toLowerCase().replace(/[_-]/g,""));for(let{rule:s,re:a}of Fe)if(!(n&&s.startsWith("raw-32-byte-hex"))&&a.test(e))throw new L(t,s);return e}if(typeof e!="object"||r.has(e)||(r.add(e),ArrayBuffer.isView(e)||e instanceof ArrayBuffer))return e;if(e instanceof Map){for(let[n,s]of e.entries()){if(typeof n=="string"&&he(n))throw new L(`${t}[${JSON.stringify(n)}]`,"forbidden-key-name");z(n,`${t}[key]`,r),z(s,`${t}[${String(n)}]`,r)}return e}if(e instanceof Set){let n=0;for(let s of e.values())z(s,`${t}[${n++}]`,r);return e}if(Array.isArray(e))return e.forEach((n,s)=>z(n,`${t}[${s}]`,r)),e;for(let[n,s]of Object.entries(e)){if(he(n))throw new L(`${t}.${n}`,"forbidden-key-name");z(s,`${t}.${n}`,r,n)}return e}var _t=/[\u0000-\u001f\u007f]/;function me(e,t){if(!e||typeof e!="object"||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`${t} must be a plain object`);return e}function ye(e,t="control input"){try{z(e,t),ze(e)}catch(r){throw new TypeError(`${t} contains secret or custody material: ${r.message}`)}return e}function Q(e,{required:t=[],optional:r=[]}={},o="object"){me(e,o);let n=new Set([...t,...r]),s=Object.keys(e).filter(a=>!n.has(a));if(s.length)throw new TypeError(`${o} has unknown field ${s[0]}`);for(let a of t)if(!Object.hasOwn(e,a))throw new TypeError(`${o}.${a} is required`);return e}function be(e,t,r=200,{lower:o=!1}={}){if(typeof e!="string"||!e.trim()||e.length>r||_t.test(e))throw new TypeError(`${t} must be non-empty control-free text up to ${r} characters`);let n=e.trim();return o?n.toLowerCase():n}function ee(e,t,r=80){let o=be(e,t,r,{lower:!0});if(!/^[a-z0-9][a-z0-9._:-]*$/.test(o))throw new TypeError(`${t} must be a lowercase identifier`);return o}function ie(e,t,{positive:r=!1}={}){if(!Number.isSafeInteger(e)||e<0||r&&e===0)throw new TypeError(`${t} must be a ${r?"positive":"non-negative"} safe integer`);return e}function P(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))P(t);Object.freeze(e)}return e}var $t=Object.freeze(["confirmations","finalizedTag","checkpoint"]),B=Object.freeze({UNKNOWN:"UNKNOWN",INCLUDED:"INCLUDED",FINAL:"FINAL"}),Pt=Object.freeze(["LIVE","STALE","UNKNOWN","UNAVAILABLE"]);function Be({family:e,chainId:t},r="chain"){let o=ee(e,`${r}.family`,40),n;if(o==="evm"){if(typeof t=="number")n=String(ie(t,`${r}.chainId`,{positive:!0}));else if(n=be(t,`${r}.chainId`,40),!/^[1-9][0-9]*$/.test(n))throw new TypeError(`${r}.chainId must be a positive decimal EVM chain id`)}else n=ee(t,`${r}.chainId`,80);return{family:o,chainId:n}}function Ct(e,t="chain"){return Q(e,{required:["family","chainId"]},t),P(Be(e,t))}function Ge(e,t="finality rule"){ye(e,t),me(e,t);let r=e.rule;if(!$t.includes(r))throw new TypeError(`${t}.rule must be confirmations, finalizedTag, or checkpoint`);let o=r==="confirmations"?"confirmations":r;Q(e,{required:["family","chainId","rule",o]},t);let n=Be(e,t);return r==="confirmations"?{...n,rule:r,confirmations:ie(e.confirmations,`${t}.confirmations`,{positive:!0})}:{...n,rule:r,[o]:ee(e[o],`${t}.${o}`,80)}}function we(e){if(!Array.isArray(e))throw new TypeError("finality policy rules must be an array");let t=e.map((o,n)=>Ge(o,`finality policy rule ${n}`)),r=new Set;for(let o of t){let n=`${o.family}\0${o.chainId}`;if(r.has(n))throw new TypeError(`duplicate finality rule for ${o.family}:${o.chainId}`);r.add(n)}return P({policyVersion:1,rules:t})}function kt(e){if(Q(e,{required:["policyVersion","rules"]},"finality policy"),e.policyVersion!==1||!Array.isArray(e.rules))throw new TypeError("unsupported finality policy");return we(e.rules)}function Ve(e,t){let r=Ct(t,"finality query"),n=kt(e).rules.find(s=>s.family===r.family&&s.chainId===r.chainId);return n?P({status:"KNOWN",...r,rule:n}):P({status:B.UNKNOWN,reason:"MISSING_FINALITY_RULE",...r,rule:null})}function jt(e,t){if(e==null)return null;ye(e,"finality evidence");let r=t.rule==="confirmations"?"confirmations":t.rule;if(Q(e,{required:["status"],optional:[r]},"finality evidence"),!Pt.includes(e.status))throw new TypeError("finality evidence.status is unknown");let o={status:e.status};return e[r]!=null&&(o[r]=t.rule==="confirmations"?ie(e.confirmations,"finality evidence.confirmations",{positive:!0}):ee(e[r],`finality evidence.${r}`,80)),o}function Ke(e,t){if(!e||e.status===B.UNKNOWN||e.rule==null)return P({status:B.UNKNOWN,final:!1,reason:"MISSING_FINALITY_RULE"});let r=Ge(e.rule??e,"resolved finality rule"),o=jt(t,r);if(o==null)return P({status:B.UNKNOWN,final:!1,reason:"MISSING_FINALITY_EVIDENCE"});if(o.status!=="LIVE")return P({status:B.UNKNOWN,final:!1,reason:`${o.status}_EVIDENCE`});let n=!1;return r.rule==="confirmations"?n=o.confirmations!=null&&o.confirmations>=r.confirmations:r.rule==="finalizedTag"?n=o.finalizedTag===r.finalizedTag:n=o.checkpoint===r.checkpoint,P({status:n?B.FINAL:B.INCLUDED,final:n,reason:n?"PINNED_RULE_SATISFIED":"PINNED_RULE_NOT_SATISFIED",rule:r})}var Lt=1,rn=Object.freeze(["SUCCESS","FAIL","UNKNOWN"]),A=(...e)=>e.find(t=>t!=null),te=e=>!!e&&typeof e=="object"&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype;function Ht(e){if(e===!0||e===1||e==="1")return"SUCCESS";if(e===!1||e===0||e==="0")return"FAIL";if(typeof e!="string")return"UNKNOWN";let t=e.trim().toUpperCase();return["SUCCESS","SUCCEEDED","OK","EXECUTED"].includes(t)?"SUCCESS":["FAIL","FAILED","FAILURE","REVERTED","REJECTED"].includes(t)?"FAIL":"UNKNOWN"}function We(e){return typeof e=="string"&&["FAIL","FAILED","FAILURE","ORPHAN","ORPHANED","REVERTED"].includes(e.trim().toUpperCase())}function Ee(e){return e==null?e:Array.isArray(e)?e.map(Ee):te(e)?Object.fromEntries(Object.keys(e).sort().map(t=>[t,Ee(e[t])])):String(e)}function Mt(e,t,r,o){let n=A(e.finalityEvidence,o?.finality,e.evidence),s=A(e.finalityPolicy,e.policy);try{return s==null&&te(e.finalityRule)&&(s=we([{family:t,chainId:r,...e.finalityRule}])),s==null||t==null||r==null?{status:"UNKNOWN",final:!1,reason:"MISSING_FINALITY_RULE"}:Ke(Ve(s,{family:t,chainId:r}),n)}catch{return{status:"UNKNOWN",final:!1,reason:"MALFORMED_FINALITY_EVIDENCE"}}}function R(e,t,r){r!=null&&(e[t]=r)}function Ut(e){return e==null?null:String(e).trim().toLowerCase()}function ge(...e){let t=e.map(Ut).filter(Boolean);return t.length<=1||t.every(r=>r===t[0])}function ae(e={}){if(!te(e))throw new TypeError("verified receipt: input object required");let t=ve(e),r=A(t.actionReceipt,t.receipt),o=te(r)?r:t,n=A(t.observation,t.chainObservation,t.observedReceipt),s=te(n),a=A(t.txHash,o.txHash,o.transactionHash,n?.txHash,n?.transactionHash),h=A(t.family,o.family,o.chain?.family,n?.family,n?.chain?.family),c=A(t.chainId,o.chainId,o.chain?.chainId,n?.chainId,n?.chain?.chainId),l=!ge(t.txHash,o.txHash,o.transactionHash,n?.txHash,n?.transactionHash)||!ge(t.family,o.family,o.chain?.family,n?.family,n?.chain?.family)||!ge(t.chainId,o.chainId,o.chain?.chainId,n?.chainId,n?.chain?.chainId),i=Mt(t,h,c,s&&!l?n:null),p=Ht(A(n?.receiptStatus,n?.executionStatus,n?.status)),b=A(t.reconciliationStatus,t.reconciliation?.status,n?.reconciliationStatus),f=A(t.finalityState,t.finalityEvidence?.status,t.evidence?.status,n?.finalityState),u="UNKNOWN";We(b)||!l&&(s&&p==="FAIL"||We(f))?u="FAIL":!l&&a&&s&&p==="SUCCESS"&&["INCLUDED","FINAL"].includes(i.status)&&(u="SUCCESS");let d={verifiedReceiptVersion:Lt,status:u};l&&(d.reason="REFERENCE_MISMATCH"),R(d,"txHash",a),R(d,"chain",A(t.chain,o.chain,n?.chain)),R(d,"family",h),R(d,"chainId",c),R(d,"block",A(n?.block,t.block)),R(d,"blockState",A(n?.blockState,n?.inclusionState)),d.finalityState=i.status,R(d,"confirmations",A(n?.confirmations,n?.finality?.confirmations,t.finalityEvidence?.confirmations,t.evidence?.confirmations)),R(d,"observedAt",A(n?.observedAt,t.observedAt)),R(d,"route",A(t.route,o.route)),R(d,"prepareHash",A(t.prepareHash,o.prepareHash)),R(d,"policyOutcome",A(t.policyOutcome,o.policyOutcome,o.policyChecks));let y=A(t.balanceChanges,n?.balanceChanges,n?.balances,o.balanceChanges,o.balances);return y!=null&&(d.balanceChanges=Ee(y)),R(d,"createdAt",A(t.createdAt,o.createdAt)),R(d,"submittedAt",A(t.submittedAt,o.submittedAt)),R(d,"finalizedAt",A(t.finalizedAt,n?.finalizedAt)),R(d,"timestamps",A(t.timestamps,o.timestamps,n?.timestamps)),P(d)}import{createHash as Jt}from"node:crypto";import{types as M}from"node:util";import{AsyncLocalStorage as vt}from"node:async_hooks";var Ft=new vt,Dt=["http","retry","shared"],zt=512;function ce(e){let t=Ft.getStore();if(!t||t.closed||!Dt.includes(e))return null;if(t.spans.length>=zt)return t.droppedSpans++,null;let r={stage:e,startMs:t.now()-t.start,durationMs:null,outcome:"pending",status:null};return t.spans.push(r),(o,n=null)=>{t.closed||r.durationMs!==null||(r.durationMs=Math.max(0,t.now()-t.start-r.startMs),r.outcome=o==="succeeded"?"succeeded":"failed",r.status=Number.isInteger(n)&&n>=100&&n<=599?n:null)}}import G from"node:net";import Bt from"node:dns";var Gt=new Set(["localhost","metadata.google.internal","metadata.goog"]);function ue(e){let t=String(e).toLowerCase().split("%")[0];if((t.match(/::/g)||[]).length>1)return null;let r=i=>{if(!i)return[];let p=i.split(":"),b=p.at(-1);if(b?.includes(".")){let f=b.split(".").map(Number);if(f.length!==4||f.some(u=>!Number.isInteger(u)||u<0||u>255))return null;p.splice(p.length-1,1,(f[0]<<8|f[1]).toString(16),(f[2]<<8|f[3]).toString(16))}return p.some(f=>!/^[0-9a-f]{1,4}$/.test(f))?null:p.map(f=>Number.parseInt(f,16))},[o,n]=t.split("::"),s=r(o),a=r(n);if(!s||!a)return null;let h=t.includes("::"),c=8-s.length-a.length;if(!h&&c!==0||h&&c<1)return null;let l=[...s,...Array(Math.max(0,c)).fill(0),...a];return l.length!==8?null:Uint8Array.from(l.flatMap(i=>[i>>8,i&255]))}function Se(e,t,r){let o=Math.floor(r/8),n=r%8;for(let a=0;a<o;a+=1)if(e[a]!==t[a])return!1;if(!n)return!0;let s=255<<8-n;return(e[o]&s)===(t[o]&s)}function Ae(e){if(G.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(G.isIPv6(e)){let t=ue(e);if(!t)return!1;let r=ue("::ffff:0:0");return Se(t,r,96)?Ae([...t.slice(12)].join(".")):Se(t,ue("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([n,s])=>Se(t,ue(n),s)):!1}return!1}function Vt(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(Gt.has(r)||r.endsWith(".localhost")||r.endsWith(".internal"))return{ok:!1,error:`refused internal host ${r}`};let o=G.isIP(r);return o!==0&&!Ae(r)?{ok:!1,error:`refused private address ${r}`}:{ok:!0,url:t,host:r,isLiteralIp:o!==0}}async function xe(e,{lookupFn:t=Bt.promises.lookup}={}){let r=Vt(e);if(!r.ok)return r;if(r.isLiteralIp)return{ok:!0,url:r.url,addresses:[{address:r.host,family:G.isIPv6(r.host)?6:4}]};let o;if(process.env.ORACLE_HOSTED_EGRESS_PROXY)return{ok:!0,url:r.url,addresses:[]};try{o=await t(r.host,{all:!0,verbatim:!0})}catch{return{ok:!1,error:`refused: ${r.host} did not resolve`}}return!Array.isArray(o)||o.length===0||o.some(n=>!Ae(n.address))?{ok:!1,error:`refused: ${r.host} resolves to a non-public address`}:{ok:!0,url:r.url,addresses:o}}function Kt(e=process.env){let t=e.ORACLE_HOSTED_EGRESS_PROXY||"";if(!t)return null;let r;try{r=new URL(t)}catch{throw new Error("egress-guard: ORACLE_HOSTED_EGRESS_PROXY is not a URL")}if(r.protocol!=="http:"||!["127.0.0.1","::1","localhost","[::1]"].includes(r.hostname)||!r.port||r.username||r.password)throw new Error("egress-guard: egress proxy must be an exact loopback http origin");let o=e.ORACLE_HOSTED_EGRESS_TOKEN||"";if(!/^[A-Za-z0-9_-]{43}$/.test(o))throw new Error("egress-guard: egress proxy token is missing");return{uri:r.origin,token:o}}async function Te({requireUndici:e=!1,importUndici:t=()=>import("undici")}={}){let r,o,n;try{n=await t(),r=n.Agent,o=n.fetch}catch(f){if(e)throw new Error(`egress-guard: untrustedUrl pinning requires the undici package, which failed to load: ${f?.message||f}`);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 s=f=>String(f).toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,""),a=new Map,h=f=>(Array.isArray(f)?f:[f]).map(u=>typeof u=="string"?{address:u}:u).filter(u=>u&&u.address).map(u=>({address:u.address,family:u.family||(G.isIPv6(u.address)?6:4)})),c=(f,u,d)=>{a.set(s(f),h(typeof u=="string"?[{address:u,family:d}]:u))},l=f=>{let u=s(f);if(G.isIP(u))return[{address:u,family:G.isIPv6(u)?6:4}];let d=a.get(u);if(!d||!d.length)throw new Error(`refused: unpinned host ${f} during pinned fetch`);return d},i=Kt(),p=i&&typeof n.ProxyAgent=="function"?new n.ProxyAgent({uri:i.uri,token:`Bearer ${i.token}`,connectTimeout:1e4}):new r({connect:{lookup(f,u,d){let y;try{y=l(f)}catch(S){return d(S)}return u?.all?d(null,y):d(null,y[0].address,y[0].family)}}}),b=Wt((f,u={})=>o(f,{...u,dispatcher:p}),c);return{dispatcher:p,fetch:b,pin:c,resolve:l,async close(){try{await p.destroy()}catch{}}}}var Oe=Symbol.for("oracle.egressGuard.pinCapableFetch");function Wt(e,t){if(typeof e!="function")throw new Error("markPinCapableFetch: fetchImpl must be a function");if(typeof t!="function")throw new Error("markPinCapableFetch: pin must be a function");return e[Oe]=Object.freeze({pin:t}),e}function Ie(e){return typeof e=="function"&&typeof e[Oe]?.pin=="function"}function Je(e,t,r){if(!Ie(e))throw new Error("pinFetchToAddresses: fetchImpl is not pin-capable");e[Oe].pin(t,r)}var Yt=new Set([408,425,429,500,502,503,504]),Ye=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),qt=2,qe=4e3,Xt=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"aborted")?.get,Zt=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"reason")?.get,Qt=AbortSignal.prototype.throwIfAborted,er=EventTarget.prototype.addEventListener,Xe=EventTarget.prototype.removeEventListener,Ze=typeof AbortSignal.any=="function"?AbortSignal.any.bind(AbortSignal):null,re=e=>e?Xt.call(e):!1,tr=e=>e?Zt.call(e):void 0,rr=new Set([301,302,303,307,308]),fe=3,hn=64*1024,H=Object.freeze({depth:32,nodes:1e4,fields:1e4,arrayLength:1e4,bytes:1024*1024});function x(e){return F(`HTTP JSON body refused: ${e}`)}function nr(e){return["isArgumentsObject","isArrayBuffer","isAnyArrayBuffer","isArrayBufferView","isBoxedPrimitive","isDataView","isDate","isExternal","isGeneratorObject","isKeyObject","isCryptoKey","isMap","isMapIterator","isModuleNamespaceObject","isNativeError","isPromise","isRegExp","isSet","isSetIterator","isTypedArray","isWeakMap","isWeakSet"].some(t=>typeof M[t]=="function"&&M[t](e))}function or(e){let t=[],r=0,o=0,n=0,s=0,a=new WeakSet,h=i=>{if(r+=Buffer.byteLength(i,"utf8"),r>H.bytes)throw x("serialized byte limit exceeded");t.push(i)},c=i=>{if(Buffer.byteLength(i,"utf8")>H.bytes)throw x("serialized byte limit exceeded");return JSON.stringify(i)},l=(i,p)=>{if(o+=1,o>H.nodes)throw x("node limit exceeded");if(p>H.depth)throw x("depth limit exceeded");if(i===null){h("null");return}if(typeof i=="string"){h(c(i));return}if(typeof i=="boolean"){h(i?"true":"false");return}if(typeof i=="number"){if(!Number.isFinite(i))throw x("non-finite number");h(Object.is(i,-0)?"0":String(i));return}if(typeof i!="object")throw x("unsupported non-JSON value");if(M.isProxy(i))throw x("proxy value");if(nr(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 u=Object.getPrototypeOf(i),d=0;for(;u!==null;){if(M.isProxy(u))throw x("proxy array prototype");if(d+=1,d>H.depth)throw x("array prototype depth limit exceeded");u=Object.getPrototypeOf(u)}if(i.length>H.arrayLength)throw x("array length limit exceeded");for(let S=0;S<i.length;S+=1){let U=Object.getOwnPropertyDescriptor(i,String(S));if(!U||!Object.hasOwn(U,"value")||U.enumerable!==!0)throw x("array entries must be dense enumerable own data")}let y=0;for(let S in i){if(s+=1,s>H.fields)throw x("enumeration limit exceeded");if(Object.hasOwn(i,S)&&(y+=1,y>i.length))throw x("named array fields are unsupported")}if(y!==i.length)throw x("array entries must be dense enumerable own data");h("[");for(let S=0;S<i.length;S+=1)S&&h(","),l(Object.getOwnPropertyDescriptor(i,String(S)).value,p+1);h("]");return}let b=Object.getPrototypeOf(i);if(b!==Object.prototype&&b!==null)throw x("non-plain object");let f=[];for(let u in i){if(s+=1,s>H.fields)throw x("enumeration limit exceeded");if(!Object.hasOwn(i,u))continue;if(n+=1,n>H.fields)throw x("field limit exceeded");let d=Object.getOwnPropertyDescriptor(i,u);if(!d||!Object.hasOwn(d,"value")||d.enumerable!==!0)throw x("object fields must be enumerable own data");f.push([u,d.value])}h("{");for(let u=0;u<f.length;u+=1)u&&h(","),h(c(f[u][0])),h(":"),l(f[u][1],p+1);h("}")}finally{a.delete(i)}};return l(e,0),t.join("")}function sr(e){let t=Object.create(null);if(e==null)return t;if(typeof e!="object"&&typeof e!="function")throw new TypeError("HTTP headers must be an object");if(M.isProxy(e))throw new TypeError("HTTP headers must not be a proxy");if(Object.getOwnPropertySymbols(e).length>0)throw new TypeError("HTTP headers must not contain symbol fields");let r=new Set;for(let o of Object.keys(e)){if(!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/u.test(o))throw new TypeError("HTTP header names must be valid tokens");let n=o.toLowerCase();if(r.has(n))throw new TypeError("HTTP headers contain a duplicate canonical name");r.add(n);let s=Object.getOwnPropertyDescriptor(e,o);if(!s||!Object.hasOwn(s,"value"))throw new TypeError("HTTP headers must contain own data properties");let a=s.value;if(a==null||["object","function","symbol"].includes(typeof a))throw new TypeError("HTTP header values must be scalar");t[o]=String(a)}return t}function ir(){return Object.assign(Object.create(null),{Accept:"application/json"})}function ar(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 cr(e,t){return new URL(String(e)).origin===new URL(String(t)).origin}var Ne=new Map,Qe=new WeakMap,et=1;function le(e){if((typeof e!="object"||e===null)&&typeof e!="function")return`${typeof e}:${String(e)}`;let t=Qe.get(e);return t||(t=et,et+=1,Qe.set(e,t)),`reference:${t}`}var ur=new Set(["eth_blockNumber","eth_call","eth_chainId","eth_estimateGas","getHealth","minimumLedgerSlot","net_version","simulateTransaction","web3_clientVersion"]),lr=new Set(["allMids","l2Book","outcomeMeta","spotClearinghouseState","userFills","meta","metaAndAssetCtxs","perpDexs","candleSnapshot","fundingHistory","openOrders","frontendOpenOrders","clearinghouseState","spotMeta","validatorSummaries","delegatorSummary","delegations","delegatorRewards","delegatorHistory","maxBuilderFee"]);function tt(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?ur.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 rt(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(tt);if(!r||typeof r!="object")return!1;if(Object.hasOwn(r,"jsonrpc")||Object.hasOwn(r,"method"))return tt(r);let o=Object.hasOwn(r,"type")?r.type:null;return typeof o=="string"&&lr.has(o)&&(!Object.hasOwn(r,"action")||r.action==null)&&(!Object.hasOwn(r,"signature")||r.signature==null)&&(!Object.hasOwn(r,"nonce")||r.nonce==null)}function fr(e,t,r,o={},n=null){let s=Jt("sha256"),a=(c,l)=>{let i=String(l);s.update(String(Buffer.byteLength(c,"utf8"))).update(":").update(c),s.update("=").update(String(Buffer.byteLength(i,"utf8"))).update(":").update(i).update(`
2
- `)};a("method",e),a("url",t),Object.keys(r||{}).map((c,l)=>({name:c.toLowerCase(),order:l,value:String(r[c])})).sort((c,l)=>c.name.localeCompare(l.name)||c.order-l.order).forEach((c,l)=>{a(`header-name-${l}`,c.name),a(`header-value-${l}`,c.value)}),a("body",n??"-");for(let c of["untrustedUrl","maxResponseBytes","sameOriginRedirectsOnly","redirectPolicy","maxRedirects","timeoutMs","retries","fetchImpl","realFetch","lookupFn","importUndici","validateResponse"])a(`context-${c}`,o[c]??"-");return s.digest("hex")}function dr(e,t){let r=Number(t);return Number.isFinite(r)&&r>0?Math.min(r*1e3,qe):Math.min(250*2**e,qe)+Math.floor(Math.random()*100)}var pr=e=>new Promise(t=>setTimeout(t,e));function F(e,t={}){let r=new Error(e);return r.retryable=!1,Object.assign(r,t),r}function Re(e,t,r){return F(`HTTP response from ${e} exceeded maxResponseBytes ${r} (${t})`,{oversize:!0})}function V(e){try{let t=e?.body?.cancel?.();t&&typeof t.then=="function"&&t.catch(()=>{})}catch{}}function hr(e){return e?e.byteLength??e.length??0:0}async function mr(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&&(V(e),!o))throw Re(r,`content-length ${s}`,t);let a=e.body?.getReader?.();if(!a){let p=await e.text(),b=Buffer.byteLength(p,"utf8");if(b>t){if(!o)throw Re(r,`body ${b} bytes`,t);return Buffer.from(p,"utf8").subarray(0,t).toString("utf8")}return p}let h=[],c=0,l=!1;try{for(;;){let{value:p,done:b}=await a.read();if(b)break;if(p&&(h.push(Buffer.from(p)),c+=hr(p),c>t)){l=!0;break}}}finally{if(l)try{await a.cancel()}catch{}try{a.releaseLock?.()}catch{}}if(l&&(typeof n=="function"&&n(),!o))throw Re(r,`streamed ${c} bytes`,t);let i=Buffer.concat(h);return(l?i.subarray(0,t):i).toString("utf8")}function yr(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}async function br(e,{fetchImpl:t,method:r,headers:o,body:n,timeoutMs:s,lookupFn:a,realFetch:h,untrustedUrl:c=!1,maxResponseBytes:l=null,sameOriginRedirectsOnly:i=!1,importUndici:p,validateResponse:b,signal:f,redirectPolicy:u="follow",maxRedirects:d=fe}){let y=null,S=t,U=a?{lookupFn:a}:{};if(c&&!h&&!Ie(S))throw F(`HTTP refused ${e}: untrustedUrl requires a pin-capable fetchImpl (see markPinCapableFetch in egress-guard.mjs) or no fetchImpl override so Oracle can pin the connection itself`);let _=new AbortController,k=setTimeout(()=>_.abort(),s),W=f?Ze?Ze([f,_.signal]):f:_.signal,J=async(w,{status:O=null}={})=>{let I=await xe(w,U);if(!I.ok)throw F(O==null?`HTTP refused ${w}: ${I.error}`:`HTTP redirect to ${w} ${I.error}`,O==null?{}:{status:O});let v=new URL(w).hostname;if(h){if(y&&(await y.close(),y=null),!y)try{y=await Te({requireUndici:!0,...p?{importUndici:p}:{}})}catch(m){throw F(O==null?`HTTP refused ${w}: ${m?.message||m}`:`HTTP redirect to ${w} refused: ${m?.message||m}`,O==null?{}:{status:O})}y.pin(v,I.addresses),S=y.fetch}else Je(S,v,I.addresses);return I};try{let w=String(e),O=Object.assign(Object.create(null),o||{});c&&await J(w);for(let I=0;I<=d;I+=1){let v=Object.assign(Object.create(null),{method:r,headers:O,body:n,signal:W,redirect:"manual",dispatcher:void 0}),m=await S(w,v);if((u==="error"||d===0)&&m.status>=300&&m.status<400)throw V(m),F(`HTTP ${m.status} ${r} redirect refused`,{status:m.status,redirectRefused:!0});if(rr.has(m.status)){let $=i===!0&&r==="POST"&&[307,308].includes(m.status)&&rt(r,n);if(r!=="GET"&&r!=="HEAD"&&!$){V(m);let T=new Error(`HTTP ${m.status} ${r} ${w} redirected non-idempotent request`);throw T.status=m.status,T}if(I===d)throw V(m),F(`HTTP ${m.status} ${r} redirect budget exhausted`,{status:m.status,redirectRefused:!0});let ke=m.headers?.get?.("location"),C;try{C=ar(ke,w)}catch(T){throw V(m),T}let D=!cr(C,w);if(V(m),D&&r==="POST"){let T=new Error(`HTTP ${m.status} ${r} cross-origin redirect refused`);throw T.status=m.status,T}if(D&&i){let T=new Error(`HTTP ${m.status} ${r} cross-origin redirect refused`);throw T.status=m.status,T.retryable=!1,T}if(D&&(O=ir(O)),c)await J(C,{status:m.status});else if(D){let T=await xe(C,U);if(!T.ok){let E=new Error(`HTTP redirect from ${w} ${T.error}`);throw E.status=m.status,E.retryable=!1,E}h&&T.addresses?.length&&(y||(y=await Te(p?{importUndici:p}:{})),y&&(y.pin(new URL(C).hostname,T.addresses),S=y.fetch))}w=C;continue}if(typeof b=="function")try{await b(m,{url:w})}catch($){throw V(m),F($?.message||String($))}let N=await mr(m,l,{url:w,onOversize:()=>_.abort()}),Y=yr(N);if(!m.ok){let $=new Error(`HTTP ${m.status} ${r} ${w}`);throw $.status=m.status,$.retryAfter=m.headers?.get?.("retry-after")??null,$.body=Y??N.slice(0,300),$}return Y??N}throw new Error(`HTTP redirect loop for ${e}`)}catch(w){if(_.signal.aborted&&!re(f)){let O=w&&(typeof w=="object"||typeof w=="function")&&!M.isProxy(w)?w:null,I=O?Object.getOwnPropertyDescriptor(O,"oversize"):null;if(!(I&&Object.hasOwn(I,"value")&&I.value===!0))try{if(!O)throw new TypeError("unsafe rejection");Object.defineProperties(O,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}})}catch{let m=new Error("HTTP request timed out");throw Object.defineProperties(m,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}}),m}}throw w}finally{clearTimeout(k),y&&await y.close()}}async function nt(e,t={}){if(t!=null&&typeof t!="object"&&typeof t!="function")throw new TypeError("HTTP options must be an object");if(t!=null&&M.isProxy(t))throw new TypeError("HTTP options must not be a proxy");let r=new Set(["body","dedupe","fetchImpl","headers","importUndici","lookupFn","maxRedirects","maxResponseBytes","method","redirectPolicy","retries","sameOriginRedirectsOnly","signal","timeoutMs","untrustedUrl","validateResponse"]);if(t!=null){if(Object.getOwnPropertySymbols(t).length>0)throw new TypeError("HTTP options contain unknown fields");for(let E of Object.getOwnPropertyNames(t)){let g=Object.getOwnPropertyDescriptor(t,E);if(!(E==="toJSON"&&g&&Object.hasOwn(g,"value")&&g.value===void 0)){if(!r.has(E))throw new TypeError("HTTP options contain unknown fields");if(!g||!g.enumerable||!Object.hasOwn(g,"value"))throw new TypeError("HTTP options must contain enumerable own data properties")}}}let o=E=>{if(t==null||!Object.hasOwn(t,E))return;let g=Object.getOwnPropertyDescriptor(t,E);if(!g||!Object.hasOwn(g,"value"))throw new TypeError("HTTP options must contain own data properties");return g.value};if(typeof e!="string"||e.length===0||e.length>8192)throw new TypeError("HTTP URL must be a bounded string");let n=o("method");if(n!==void 0&&(typeof n!="string"||!/^[A-Za-z]+$/u.test(n)))throw new TypeError("HTTP method must be a string token");let s=o("timeoutMs");if(s!==void 0&&(!Number.isInteger(s)||s<1||s>12e4))throw new TypeError("HTTP timeoutMs must be a bounded integer");let a=o("retries");if(a!==void 0&&(!Number.isInteger(a)||a<0||a>10))throw new TypeError("HTTP retries must be a bounded integer");let h=o("redirectPolicy");if(h!==void 0&&h!=="follow"&&h!=="error")throw new TypeError('HTTP redirectPolicy must be "follow" or "error"');let c=o("maxRedirects");if(c!==void 0&&(!Number.isInteger(c)||c<0||c>fe))throw new TypeError(`HTTP maxRedirects must be an integer from 0 through ${fe}`);if(h==="error"&&c!==void 0&&c!==0)throw new TypeError('HTTP redirectPolicy "error" requires maxRedirects 0 when supplied');let l=h??"follow",i=l==="error"?0:c??fe;for(let E of["dedupe","untrustedUrl","sameOriginRedirectsOnly"]){let g=o(E);if(g!==void 0&&typeof g!="boolean")throw new TypeError(`HTTP ${E} must be boolean`)}let p=o("maxResponseBytes");if(p!==void 0&&(!Number.isInteger(p)||p<1||p>64*1024*1024))throw new TypeError("HTTP maxResponseBytes must be a bounded integer");let b=o("signal");if(b!==void 0){if(M.isProxy(b)||!(b instanceof AbortSignal))throw new TypeError("HTTP signal must be a native AbortSignal");try{re(b)}catch{throw new TypeError("HTTP signal must be a native AbortSignal")}}for(let E of["importUndici","lookupFn","validateResponse"]){let g=o(E);if(g!==void 0&&typeof g!="function")throw new TypeError(`HTTP ${E} must be a function`)}let f=o("fetchImpl"),u=f||globalThis.fetch;if(typeof u!="function")throw new Error("fetch unavailable \u2014 pass opts.fetchImpl");let d=s??12e3,y=(n||"GET").toUpperCase(),S=o("headers"),U=sr(S),_=Object.assign(Object.create(null),U);Object.keys(_).some(E=>E.toLowerCase()==="accept")||(_.Accept="application/json");let k=o("body");k!=null&&typeof k!="string"&&(Object.keys(_).find(g=>g.toLowerCase()==="content-type")||(_["Content-Type"]="application/json"),k=or(k));let W=a??qt,J=o("lookupFn"),w=!f,O=o("untrustedUrl")===!0,I=o("sameOriginRedirectsOnly")===!0,v=o("importUndici"),m=o("validateResponse"),N=b,Y=p??null,$=async()=>{let E;for(let g=0;g<=W;g++){N&&Qt.call(N);let je=ce("http");try{let j=await br(e,{fetchImpl:u,method:y,headers:_,body:k,timeoutMs:d,lookupFn:J,realFetch:w,untrustedUrl:O,maxResponseBytes:Y,sameOriginRedirectsOnly:I,importUndici:v,validateResponse:m,signal:N,redirectPolicy:l,maxRedirects:i});return je?.("succeeded"),j}catch(j){E=j;let K=de=>{if(!j||typeof j!="object"&&typeof j!="function"||M.isProxy(j))return;let q=Object.getOwnPropertyDescriptor(j,de);return q&&Object.hasOwn(q,"value")?q.value:void 0},se=K("status");je?.("failed",se);let ft=K("oracleTimeout")===!0||K("name")==="AbortError"||K("name")==="TimeoutError"||re(N),dt=new Set([408,425,429]),pt=K("retryable")===!1?!1:se!=null?dt.has(se)||Yt.has(se)&&Ye.has(y):!ft&&Ye.has(y);if(g===W||!pt)throw j;let Le=dr(g,K("retryAfter")),ht=ce("retry"),He=!1;try{N?await new Promise((de,q)=>{let Me,X=()=>{clearTimeout(Me),Xe.call(N,"abort",X),q(tr(N)||new DOMException("Aborted","AbortError"))};if(re(N)){X();return}Me=setTimeout(()=>{Xe.call(N,"abort",X),de()},Le),er.call(N,"abort",X,{once:!0}),re(N)&&X()}):await pr(Le),He=!0}finally{ht?.(He?"succeeded":"failed")}}}throw E};if(!(o("dedupe")!==!1&&!N&&rt(y,k)))return $();let C=fr(y,e,_,{untrustedUrl:O,maxResponseBytes:Y,sameOriginRedirectsOnly:I,redirectPolicy:l,maxRedirects:i,timeoutMs:d,retries:W,fetchImpl:le(u),realFetch:w,lookupFn:le(J),importUndici:le(v),validateResponse:le(m)},k),D=Ne.get(C);if(D){let E=ce("shared");try{let g=await D;return E?.("succeeded"),g}catch(g){throw E?.("failed"),g}}let T=$().finally(()=>Ne.delete(C));return Ne.set(C,T),T}var _e={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}};var wr=new Map(Object.values(_e).map(e=>[e.chainId,e]));function ot(e){return wr.get(Number(e))||null}function st(e,t=process.env){let r=ot(e);if(!r)return null;for(let o of r.rpcEnv){let n=(t[o]||"").trim();if(n)return n}return null}import{Interface as gr,getAddress as Er}from"ethers";var xn=new gr(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);function $e(e,t){try{return Er(e).toLowerCase()}catch{throw new Error(`${t} must be a valid EVM address`)}}function Sr(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 Pe(e){return e==null?null:Number.parseInt(String(e),16)}var Ar={1:"https://ethereum.publicnode.com",137:"https://polygon-bor-rpc.publicnode.com",42161:"https://arbitrum-one-rpc.publicnode.com",8453:"https://base-rpc.publicnode.com",10:"https://optimism-rpc.publicnode.com",988:"https://rpc.stable.xyz",56:"https://bsc-rpc.publicnode.com",43114:"https://avalanche-c-chain-rpc.publicnode.com",999:"https://rpc.hyperliquid.xyz/evm",2741:"https://api.mainnet.abs.xyz",4663:"https://rpc.mainnet.chain.robinhood.com"};function xr(e,{rpcUrl:t,env:r=process.env}={}){if(t)return t;let o=st(e,r);return o||Ar[Number(e)]||null}var Tr=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/;function Or(e){let t=String(e||""),r=t.toLowerCase();if(t!==t.trim()||!/^[a-zA-Z0-9_]+$/.test(t)||!Tr.test(r))throw new Error(`evm-rpc: ${t} refused \u2014 @oracle-agent/oracle is prepare-only (read RPC only; no broadcast/sign)`);return r}var ne=new Map,it=new Map;function Ir(e){let t=new Error(e?.message||JSON.stringify(e));return t.code=e?.code,t}function Nr(e){if(e?.error)throw Ir(e.error);return e?.result}function Rr(e,t,r){return`${e}
1
+ import{wordlists as mt}from"ethers";var yt=new Set(["privatekey","privkey","secretkey","seedphrase","seed","mnemonic","passphrase","password","keystore","keymaterial","wif","xprv","xpriv","bearer","authorization","signature","apikey","credential"]),bt=[/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/,/\bxprv[0-9A-Za-z]{50,}\b/],wt=new Set([12,15,18,21,24]);function gt(e){let t=String(e).trim().toLowerCase().split(/\s+/).filter(Boolean);return wt.has(t.length)&&t.every(r=>mt.en.getWordIndex(r)>=0)}var Et=/^\s*(?:0x)?[0-9a-fA-F]{64}\s*$/,St=/(hash|digest|root|salt|nonce|proof|commitment|sig|id)(?:e?s)?$/i,At=new Set(["calldata","data","publickey","pubkey","message","payload","input","extradata"]);function xt(e){let t=Ue(e);return At.has(t)||St.test(t)}var Z=class extends Error{constructor(t){super(`action receipt refused: secret-bearing field at ${t}`),this.name="ActionReceiptSecretError",this.code="ACTION_RECEIPT_SECRET"}};function Ue(e){return String(e).replace(/[^a-z0-9]/gi,"").toLowerCase()}function Tt(e){let t=Ue(e);return[...yt].some(r=>t.includes(r))}function Ot(e,t,r){if(typeof t=="string"){if(bt.some(o=>o.test(t))||gt(t))throw new Z(r);if(Et.test(t)&&!xt(e))throw new Z(r)}}function pe(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string")return Ot(r,e,t),e;if(typeof e=="number"){if(!Number.isFinite(e))throw new TypeError(`action receipt: non-finite number at ${t}`);return e}if(typeof e=="bigint")return e.toString();if(Array.isArray(e))return e.map((n,s)=>pe(n,`${t}[${s}]`,r));if(typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`action receipt: JSON-like value required at ${t}`);let o={};for(let n of Object.keys(e).sort()){let s=`${t}.${n}`;if(Tt(n))throw new Z(s);e[n]!==void 0&&(o[n]=pe(e[n],s,n))}return o}function ve(e){return pe(e)}var jr=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),Hr=Object.freeze(["read","simulate"]);var Mr=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}},It=/(private[_-]?key|secret|bearer|keystore|mnemonic|seed[_-]?phrase|passphrase|password|api[_-]?key|access[_-]?token|auth[_-]?token|session[_-]?token|signer[_-]?url|signature)/i,Nt=Object.freeze(["privkey","wif","xprv","seed"]);function he(e){let t=String(e),r=t.toLowerCase().replace(/[\s._-]+/g,"");return It.test(t)||Nt.includes(r)}var Fe=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}]),De=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"]);function Rt(e){return e.replace(/"([A-Za-z0-9_-]+)"\s*:\s*"(?:0x)?([0-9a-fA-F]{64})"/g,(t,r)=>De.includes(String(r).toLowerCase().replace(/[_-]/g,""))?`"${r}":"<hex64>"`:t)}function ze(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=Rt(t);for(let{rule:n,re:s}of Fe)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&&he(n))throw new j(`$<serialized>.${n}`,"forbidden-key-name");return s}),t}function z(e,t="$",r=new Set,o=""){if(e==null)return e;if(typeof e=="string"){let n=De.includes(String(o).toLowerCase().replace(/[_-]/g,""));for(let{rule:s,re:a}of Fe)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"&&he(n))throw new j(`${t}[${JSON.stringify(n)}]`,"forbidden-key-name");z(n,`${t}[key]`,r),z(s,`${t}[${String(n)}]`,r)}return e}if(e instanceof Set){let n=0;for(let s of e.values())z(s,`${t}[${n++}]`,r);return e}if(Array.isArray(e))return e.forEach((n,s)=>z(n,`${t}[${s}]`,r)),e;for(let[n,s]of Object.entries(e)){if(he(n))throw new j(`${t}.${n}`,"forbidden-key-name");z(s,`${t}.${n}`,r,n)}return e}var _t=/[\u0000-\u001f\u007f]/;function me(e,t){if(!e||typeof e!="object"||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`${t} must be a plain object`);return e}function ye(e,t="control input"){try{z(e,t),ze(e)}catch(r){throw new TypeError(`${t} contains secret or custody material: ${r.message}`)}return e}function Q(e,{required:t=[],optional:r=[]}={},o="object"){me(e,o);let n=new Set([...t,...r]),s=Object.keys(e).filter(a=>!n.has(a));if(s.length)throw new TypeError(`${o} has unknown field ${s[0]}`);for(let a of t)if(!Object.hasOwn(e,a))throw new TypeError(`${o}.${a} is required`);return e}function be(e,t,r=200,{lower:o=!1}={}){if(typeof e!="string"||!e.trim()||e.length>r||_t.test(e))throw new TypeError(`${t} must be non-empty control-free text up to ${r} characters`);let n=e.trim();return o?n.toLowerCase():n}function ee(e,t,r=80){let o=be(e,t,r,{lower:!0});if(!/^[a-z0-9][a-z0-9._:-]*$/.test(o))throw new TypeError(`${t} must be a lowercase identifier`);return o}function ie(e,t,{positive:r=!1}={}){if(!Number.isSafeInteger(e)||e<0||r&&e===0)throw new TypeError(`${t} must be a ${r?"positive":"non-negative"} safe integer`);return e}function P(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))P(t);Object.freeze(e)}return e}var $t=Object.freeze(["confirmations","finalizedTag","checkpoint"]),B=Object.freeze({UNKNOWN:"UNKNOWN",INCLUDED:"INCLUDED",FINAL:"FINAL"}),Pt=Object.freeze(["LIVE","STALE","UNKNOWN","UNAVAILABLE"]);function Be({family:e,chainId:t},r="chain"){let o=ee(e,`${r}.family`,40),n;if(o==="evm"){if(typeof t=="number")n=String(ie(t,`${r}.chainId`,{positive:!0}));else if(n=be(t,`${r}.chainId`,40),!/^[1-9][0-9]*$/.test(n))throw new TypeError(`${r}.chainId must be a positive decimal EVM chain id`)}else n=ee(t,`${r}.chainId`,80);return{family:o,chainId:n}}function Ct(e,t="chain"){return Q(e,{required:["family","chainId"]},t),P(Be(e,t))}function Ge(e,t="finality rule"){ye(e,t),me(e,t);let r=e.rule;if(!$t.includes(r))throw new TypeError(`${t}.rule must be confirmations, finalizedTag, or checkpoint`);let o=r==="confirmations"?"confirmations":r;Q(e,{required:["family","chainId","rule",o]},t);let n=Be(e,t);return r==="confirmations"?{...n,rule:r,confirmations:ie(e.confirmations,`${t}.confirmations`,{positive:!0})}:{...n,rule:r,[o]:ee(e[o],`${t}.${o}`,80)}}function we(e){if(!Array.isArray(e))throw new TypeError("finality policy rules must be an array");let t=e.map((o,n)=>Ge(o,`finality policy rule ${n}`)),r=new Set;for(let o of t){let n=`${o.family}\0${o.chainId}`;if(r.has(n))throw new TypeError(`duplicate finality rule for ${o.family}:${o.chainId}`);r.add(n)}return P({policyVersion:1,rules:t})}function kt(e){if(Q(e,{required:["policyVersion","rules"]},"finality policy"),e.policyVersion!==1||!Array.isArray(e.rules))throw new TypeError("unsupported finality policy");return we(e.rules)}function Ve(e,t){let r=Ct(t,"finality query"),n=kt(e).rules.find(s=>s.family===r.family&&s.chainId===r.chainId);return n?P({status:"KNOWN",...r,rule:n}):P({status:B.UNKNOWN,reason:"MISSING_FINALITY_RULE",...r,rule:null})}function Lt(e,t){if(e==null)return null;ye(e,"finality evidence");let r=t.rule==="confirmations"?"confirmations":t.rule;if(Q(e,{required:["status"],optional:[r]},"finality evidence"),!Pt.includes(e.status))throw new TypeError("finality evidence.status is unknown");let o={status:e.status};return e[r]!=null&&(o[r]=t.rule==="confirmations"?ie(e.confirmations,"finality evidence.confirmations",{positive:!0}):ee(e[r],`finality evidence.${r}`,80)),o}function Ke(e,t){if(!e||e.status===B.UNKNOWN||e.rule==null)return P({status:B.UNKNOWN,final:!1,reason:"MISSING_FINALITY_RULE"});let r=Ge(e.rule??e,"resolved finality rule"),o=Lt(t,r);if(o==null)return P({status:B.UNKNOWN,final:!1,reason:"MISSING_FINALITY_EVIDENCE"});if(o.status!=="LIVE")return P({status:B.UNKNOWN,final:!1,reason:`${o.status}_EVIDENCE`});let n=!1;return r.rule==="confirmations"?n=o.confirmations!=null&&o.confirmations>=r.confirmations:r.rule==="finalizedTag"?n=o.finalizedTag===r.finalizedTag:n=o.checkpoint===r.checkpoint,P({status:n?B.FINAL:B.INCLUDED,final:n,reason:n?"PINNED_RULE_SATISFIED":"PINNED_RULE_NOT_SATISFIED",rule:r})}var jt=1,rn=Object.freeze(["SUCCESS","FAIL","UNKNOWN"]),A=(...e)=>e.find(t=>t!=null),te=e=>!!e&&typeof e=="object"&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype;function Ht(e){if(e===!0||e===1||e==="1")return"SUCCESS";if(e===!1||e===0||e==="0")return"FAIL";if(typeof e!="string")return"UNKNOWN";let t=e.trim().toUpperCase();return["SUCCESS","SUCCEEDED","OK","EXECUTED"].includes(t)?"SUCCESS":["FAIL","FAILED","FAILURE","REVERTED","REJECTED"].includes(t)?"FAIL":"UNKNOWN"}function We(e){return typeof e=="string"&&["FAIL","FAILED","FAILURE","ORPHAN","ORPHANED","REVERTED"].includes(e.trim().toUpperCase())}function Ee(e){return e==null?e:Array.isArray(e)?e.map(Ee):te(e)?Object.fromEntries(Object.keys(e).sort().map(t=>[t,Ee(e[t])])):String(e)}function Mt(e,t,r,o){let n=A(e.finalityEvidence,o?.finality,e.evidence),s=A(e.finalityPolicy,e.policy);try{return s==null&&te(e.finalityRule)&&(s=we([{family:t,chainId:r,...e.finalityRule}])),s==null||t==null||r==null?{status:"UNKNOWN",final:!1,reason:"MISSING_FINALITY_RULE"}:Ke(Ve(s,{family:t,chainId:r}),n)}catch{return{status:"UNKNOWN",final:!1,reason:"MALFORMED_FINALITY_EVIDENCE"}}}function R(e,t,r){r!=null&&(e[t]=r)}function Ut(e){return e==null?null:String(e).trim().toLowerCase()}function ge(...e){let t=e.map(Ut).filter(Boolean);return t.length<=1||t.every(r=>r===t[0])}function ae(e={}){if(!te(e))throw new TypeError("verified receipt: input object required");let t=ve(e),r=A(t.actionReceipt,t.receipt),o=te(r)?r:t,n=A(t.observation,t.chainObservation,t.observedReceipt),s=te(n),a=A(t.txHash,o.txHash,o.transactionHash,n?.txHash,n?.transactionHash),h=A(t.family,o.family,o.chain?.family,n?.family,n?.chain?.family),c=A(t.chainId,o.chainId,o.chain?.chainId,n?.chainId,n?.chain?.chainId),l=!ge(t.txHash,o.txHash,o.transactionHash,n?.txHash,n?.transactionHash)||!ge(t.family,o.family,o.chain?.family,n?.family,n?.chain?.family)||!ge(t.chainId,o.chainId,o.chain?.chainId,n?.chainId,n?.chain?.chainId),i=Mt(t,h,c,s&&!l?n:null),p=Ht(A(n?.receiptStatus,n?.executionStatus,n?.status)),b=A(t.reconciliationStatus,t.reconciliation?.status,n?.reconciliationStatus),f=A(t.finalityState,t.finalityEvidence?.status,t.evidence?.status,n?.finalityState),u="UNKNOWN";We(b)||!l&&(s&&p==="FAIL"||We(f))?u="FAIL":!l&&a&&s&&p==="SUCCESS"&&["INCLUDED","FINAL"].includes(i.status)&&(u="SUCCESS");let d={verifiedReceiptVersion:jt,status:u};l&&(d.reason="REFERENCE_MISMATCH"),R(d,"txHash",a),R(d,"chain",A(t.chain,o.chain,n?.chain)),R(d,"family",h),R(d,"chainId",c),R(d,"block",A(n?.block,t.block)),R(d,"blockState",A(n?.blockState,n?.inclusionState)),d.finalityState=i.status,R(d,"confirmations",A(n?.confirmations,n?.finality?.confirmations,t.finalityEvidence?.confirmations,t.evidence?.confirmations)),R(d,"observedAt",A(n?.observedAt,t.observedAt)),R(d,"route",A(t.route,o.route)),R(d,"prepareHash",A(t.prepareHash,o.prepareHash)),R(d,"policyOutcome",A(t.policyOutcome,o.policyOutcome,o.policyChecks));let y=A(t.balanceChanges,n?.balanceChanges,n?.balances,o.balanceChanges,o.balances);return y!=null&&(d.balanceChanges=Ee(y)),R(d,"createdAt",A(t.createdAt,o.createdAt)),R(d,"submittedAt",A(t.submittedAt,o.submittedAt)),R(d,"finalizedAt",A(t.finalizedAt,n?.finalizedAt)),R(d,"timestamps",A(t.timestamps,o.timestamps,n?.timestamps)),P(d)}import{createHash as Jt}from"node:crypto";import{types as M}from"node:util";import{AsyncLocalStorage as vt}from"node:async_hooks";var Ft=new vt,Dt=["http","retry","shared"],zt=512;function ce(e){let t=Ft.getStore();if(!t||t.closed||!Dt.includes(e))return null;if(t.spans.length>=zt)return t.droppedSpans++,null;let r={stage:e,startMs:t.now()-t.start,durationMs:null,outcome:"pending",status:null};return t.spans.push(r),(o,n=null)=>{t.closed||r.durationMs!==null||(r.durationMs=Math.max(0,t.now()-t.start-r.startMs),r.outcome=o==="succeeded"?"succeeded":"failed",r.status=Number.isInteger(n)&&n>=100&&n<=599?n:null)}}import G from"node:net";import Bt from"node:dns";var Gt=new Set(["localhost","metadata.google.internal","metadata.goog"]);function ue(e){let t=String(e).toLowerCase().split("%")[0];if((t.match(/::/g)||[]).length>1)return null;let r=i=>{if(!i)return[];let p=i.split(":"),b=p.at(-1);if(b?.includes(".")){let f=b.split(".").map(Number);if(f.length!==4||f.some(u=>!Number.isInteger(u)||u<0||u>255))return null;p.splice(p.length-1,1,(f[0]<<8|f[1]).toString(16),(f[2]<<8|f[3]).toString(16))}return p.some(f=>!/^[0-9a-f]{1,4}$/.test(f))?null:p.map(f=>Number.parseInt(f,16))},[o,n]=t.split("::"),s=r(o),a=r(n);if(!s||!a)return null;let h=t.includes("::"),c=8-s.length-a.length;if(!h&&c!==0||h&&c<1)return null;let l=[...s,...Array(Math.max(0,c)).fill(0),...a];return l.length!==8?null:Uint8Array.from(l.flatMap(i=>[i>>8,i&255]))}function Se(e,t,r){let o=Math.floor(r/8),n=r%8;for(let a=0;a<o;a+=1)if(e[a]!==t[a])return!1;if(!n)return!0;let s=255<<8-n;return(e[o]&s)===(t[o]&s)}function Ae(e){if(G.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(G.isIPv6(e)){let t=ue(e);if(!t)return!1;let r=ue("::ffff:0:0");return Se(t,r,96)?Ae([...t.slice(12)].join(".")):Se(t,ue("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([n,s])=>Se(t,ue(n),s)):!1}return!1}function Vt(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(Gt.has(r)||r.endsWith(".localhost")||r.endsWith(".internal"))return{ok:!1,error:`refused internal host ${r}`};let o=G.isIP(r);return o!==0&&!Ae(r)?{ok:!1,error:`refused private address ${r}`}:{ok:!0,url:t,host:r,isLiteralIp:o!==0}}async function xe(e,{lookupFn:t=Bt.promises.lookup}={}){let r=Vt(e);if(!r.ok)return r;if(r.isLiteralIp)return{ok:!0,url:r.url,addresses:[{address:r.host,family:G.isIPv6(r.host)?6:4}]};let o;if(process.env.ORACLE_HOSTED_EGRESS_PROXY)return{ok:!0,url:r.url,addresses:[]};try{o=await t(r.host,{all:!0,verbatim:!0})}catch{return{ok:!1,error:`refused: ${r.host} did not resolve`}}return!Array.isArray(o)||o.length===0||o.some(n=>!Ae(n.address))?{ok:!1,error:`refused: ${r.host} resolves to a non-public address`}:{ok:!0,url:r.url,addresses:o}}function Kt(e=process.env){let t=e.ORACLE_HOSTED_EGRESS_PROXY||"";if(!t)return null;let r;try{r=new URL(t)}catch{throw new Error("egress-guard: ORACLE_HOSTED_EGRESS_PROXY is not a URL")}if(r.protocol!=="http:"||!["127.0.0.1","::1","localhost","[::1]"].includes(r.hostname)||!r.port||r.username||r.password)throw new Error("egress-guard: egress proxy must be an exact loopback http origin");let o=e.ORACLE_HOSTED_EGRESS_TOKEN||"";if(!/^[A-Za-z0-9_-]{43}$/.test(o))throw new Error("egress-guard: egress proxy token is missing");return{uri:r.origin,token:o}}async function Te({requireUndici:e=!1,importUndici:t=()=>import("undici")}={}){let r,o,n;try{n=await t(),r=n.Agent,o=n.fetch}catch(f){if(e)throw new Error(`egress-guard: untrustedUrl pinning requires the undici package, which failed to load: ${f?.message||f}`);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 s=f=>String(f).toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,""),a=new Map,h=f=>(Array.isArray(f)?f:[f]).map(u=>typeof u=="string"?{address:u}:u).filter(u=>u&&u.address).map(u=>({address:u.address,family:u.family||(G.isIPv6(u.address)?6:4)})),c=(f,u,d)=>{a.set(s(f),h(typeof u=="string"?[{address:u,family:d}]:u))},l=f=>{let u=s(f);if(G.isIP(u))return[{address:u,family:G.isIPv6(u)?6:4}];let d=a.get(u);if(!d||!d.length)throw new Error(`refused: unpinned host ${f} during pinned fetch`);return d},i=Kt(),p=i&&typeof n.ProxyAgent=="function"?new n.ProxyAgent({uri:i.uri,token:`Bearer ${i.token}`,connectTimeout:1e4}):new r({connect:{lookup(f,u,d){let y;try{y=l(f)}catch(S){return d(S)}return u?.all?d(null,y):d(null,y[0].address,y[0].family)}}}),b=Wt((f,u={})=>o(f,{...u,dispatcher:p}),c);return{dispatcher:p,fetch:b,pin:c,resolve:l,async close(){try{await p.destroy()}catch{}}}}var Oe=Symbol.for("oracle.egressGuard.pinCapableFetch");function Wt(e,t){if(typeof e!="function")throw new Error("markPinCapableFetch: fetchImpl must be a function");if(typeof t!="function")throw new Error("markPinCapableFetch: pin must be a function");return e[Oe]=Object.freeze({pin:t}),e}function Ie(e){return typeof e=="function"&&typeof e[Oe]?.pin=="function"}function Je(e,t,r){if(!Ie(e))throw new Error("pinFetchToAddresses: fetchImpl is not pin-capable");e[Oe].pin(t,r)}var Yt=new Set([408,425,429,500,502,503,504]),Ye=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),qt=2,qe=4e3,Xt=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"aborted")?.get,Zt=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"reason")?.get,Qt=AbortSignal.prototype.throwIfAborted,er=EventTarget.prototype.addEventListener,Xe=EventTarget.prototype.removeEventListener,Ze=typeof AbortSignal.any=="function"?AbortSignal.any.bind(AbortSignal):null,re=e=>e?Xt.call(e):!1,tr=e=>e?Zt.call(e):void 0,rr=new Set([301,302,303,307,308]),fe=3,hn=64*1024,H=Object.freeze({depth:32,nodes:1e4,fields:1e4,arrayLength:1e4,bytes:1024*1024});function x(e){return F(`HTTP JSON body refused: ${e}`)}function nr(e){return["isArgumentsObject","isArrayBuffer","isAnyArrayBuffer","isArrayBufferView","isBoxedPrimitive","isDataView","isDate","isExternal","isGeneratorObject","isKeyObject","isCryptoKey","isMap","isMapIterator","isModuleNamespaceObject","isNativeError","isPromise","isRegExp","isSet","isSetIterator","isTypedArray","isWeakMap","isWeakSet"].some(t=>typeof M[t]=="function"&&M[t](e))}function or(e){let t=[],r=0,o=0,n=0,s=0,a=new WeakSet,h=i=>{if(r+=Buffer.byteLength(i,"utf8"),r>H.bytes)throw x("serialized byte limit exceeded");t.push(i)},c=i=>{if(Buffer.byteLength(i,"utf8")>H.bytes)throw x("serialized byte limit exceeded");return JSON.stringify(i)},l=(i,p)=>{if(o+=1,o>H.nodes)throw x("node limit exceeded");if(p>H.depth)throw x("depth limit exceeded");if(i===null){h("null");return}if(typeof i=="string"){h(c(i));return}if(typeof i=="boolean"){h(i?"true":"false");return}if(typeof i=="number"){if(!Number.isFinite(i))throw x("non-finite number");h(Object.is(i,-0)?"0":String(i));return}if(typeof i!="object")throw x("unsupported non-JSON value");if(M.isProxy(i))throw x("proxy value");if(nr(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 u=Object.getPrototypeOf(i),d=0;for(;u!==null;){if(M.isProxy(u))throw x("proxy array prototype");if(d+=1,d>H.depth)throw x("array prototype depth limit exceeded");u=Object.getPrototypeOf(u)}if(i.length>H.arrayLength)throw x("array length limit exceeded");for(let S=0;S<i.length;S+=1){let U=Object.getOwnPropertyDescriptor(i,String(S));if(!U||!Object.hasOwn(U,"value")||U.enumerable!==!0)throw x("array entries must be dense enumerable own data")}let y=0;for(let S in i){if(s+=1,s>H.fields)throw x("enumeration limit exceeded");if(Object.hasOwn(i,S)&&(y+=1,y>i.length))throw x("named array fields are unsupported")}if(y!==i.length)throw x("array entries must be dense enumerable own data");h("[");for(let S=0;S<i.length;S+=1)S&&h(","),l(Object.getOwnPropertyDescriptor(i,String(S)).value,p+1);h("]");return}let b=Object.getPrototypeOf(i);if(b!==Object.prototype&&b!==null)throw x("non-plain object");let f=[];for(let u in i){if(s+=1,s>H.fields)throw x("enumeration limit exceeded");if(!Object.hasOwn(i,u))continue;if(n+=1,n>H.fields)throw x("field limit exceeded");let d=Object.getOwnPropertyDescriptor(i,u);if(!d||!Object.hasOwn(d,"value")||d.enumerable!==!0)throw x("object fields must be enumerable own data");f.push([u,d.value])}h("{");for(let u=0;u<f.length;u+=1)u&&h(","),h(c(f[u][0])),h(":"),l(f[u][1],p+1);h("}")}finally{a.delete(i)}};return l(e,0),t.join("")}function sr(e){let t=Object.create(null);if(e==null)return t;if(typeof e!="object"&&typeof e!="function")throw new TypeError("HTTP headers must be an object");if(M.isProxy(e))throw new TypeError("HTTP headers must not be a proxy");if(Object.getOwnPropertySymbols(e).length>0)throw new TypeError("HTTP headers must not contain symbol fields");let r=new Set;for(let o of Object.keys(e)){if(!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/u.test(o))throw new TypeError("HTTP header names must be valid tokens");let n=o.toLowerCase();if(r.has(n))throw new TypeError("HTTP headers contain a duplicate canonical name");r.add(n);let s=Object.getOwnPropertyDescriptor(e,o);if(!s||!Object.hasOwn(s,"value"))throw new TypeError("HTTP headers must contain own data properties");let a=s.value;if(a==null||["object","function","symbol"].includes(typeof a))throw new TypeError("HTTP header values must be scalar");t[o]=String(a)}return t}function ir(){return Object.assign(Object.create(null),{Accept:"application/json"})}function ar(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 cr(e,t){return new URL(String(e)).origin===new URL(String(t)).origin}var Ne=new Map,Qe=new WeakMap,et=1;function le(e){if((typeof e!="object"||e===null)&&typeof e!="function")return`${typeof e}:${String(e)}`;let t=Qe.get(e);return t||(t=et,et+=1,Qe.set(e,t)),`reference:${t}`}var ur=new Set(["eth_blockNumber","eth_call","eth_chainId","eth_estimateGas","getHealth","minimumLedgerSlot","net_version","simulateTransaction","web3_clientVersion"]),lr=new Set(["allMids","l2Book","outcomeMeta","spotClearinghouseState","userFills","meta","metaAndAssetCtxs","perpDexs","candleSnapshot","fundingHistory","openOrders","frontendOpenOrders","clearinghouseState","spotMeta","validatorSummaries","delegatorSummary","delegations","delegatorRewards","delegatorHistory","maxBuilderFee"]);function tt(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?ur.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 rt(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(tt);if(!r||typeof r!="object")return!1;if(Object.hasOwn(r,"jsonrpc")||Object.hasOwn(r,"method"))return tt(r);let o=Object.hasOwn(r,"type")?r.type:null;return typeof o=="string"&&lr.has(o)&&(!Object.hasOwn(r,"action")||r.action==null)&&(!Object.hasOwn(r,"signature")||r.signature==null)&&(!Object.hasOwn(r,"nonce")||r.nonce==null)}function fr(e,t,r,o={},n=null){let s=Jt("sha256"),a=(c,l)=>{let i=String(l);s.update(String(Buffer.byteLength(c,"utf8"))).update(":").update(c),s.update("=").update(String(Buffer.byteLength(i,"utf8"))).update(":").update(i).update(`
2
+ `)};a("method",e),a("url",t),Object.keys(r||{}).map((c,l)=>({name:c.toLowerCase(),order:l,value:String(r[c])})).sort((c,l)=>c.name.localeCompare(l.name)||c.order-l.order).forEach((c,l)=>{a(`header-name-${l}`,c.name),a(`header-value-${l}`,c.value)}),a("body",n??"-");for(let c of["untrustedUrl","maxResponseBytes","sameOriginRedirectsOnly","redirectPolicy","maxRedirects","timeoutMs","retries","fetchImpl","realFetch","lookupFn","importUndici","validateResponse"])a(`context-${c}`,o[c]??"-");return s.digest("hex")}function dr(e,t){let r=Number(t);return Number.isFinite(r)&&r>0?Math.min(r*1e3,qe):Math.min(250*2**e,qe)+Math.floor(Math.random()*100)}var pr=e=>new Promise(t=>setTimeout(t,e));function F(e,t={}){let r=new Error(e);return r.retryable=!1,Object.assign(r,t),r}function Re(e,t,r){return F(`HTTP response from ${e} exceeded maxResponseBytes ${r} (${t})`,{oversize:!0})}function V(e){try{let t=e?.body?.cancel?.();t&&typeof t.then=="function"&&t.catch(()=>{})}catch{}}function hr(e){return e?e.byteLength??e.length??0:0}async function mr(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&&(V(e),!o))throw Re(r,`content-length ${s}`,t);let a=e.body?.getReader?.();if(!a){let p=await e.text(),b=Buffer.byteLength(p,"utf8");if(b>t){if(!o)throw Re(r,`body ${b} bytes`,t);return Buffer.from(p,"utf8").subarray(0,t).toString("utf8")}return p}let h=[],c=0,l=!1;try{for(;;){let{value:p,done:b}=await a.read();if(b)break;if(p&&(h.push(Buffer.from(p)),c+=hr(p),c>t)){l=!0;break}}}finally{if(l)try{await a.cancel()}catch{}try{a.releaseLock?.()}catch{}}if(l&&(typeof n=="function"&&n(),!o))throw Re(r,`streamed ${c} bytes`,t);let i=Buffer.concat(h);return(l?i.subarray(0,t):i).toString("utf8")}function yr(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}async function br(e,{fetchImpl:t,method:r,headers:o,body:n,timeoutMs:s,lookupFn:a,realFetch:h,untrustedUrl:c=!1,maxResponseBytes:l=null,sameOriginRedirectsOnly:i=!1,importUndici:p,validateResponse:b,signal:f,redirectPolicy:u="follow",maxRedirects:d=fe}){let y=null,S=t,U=a?{lookupFn:a}:{};if(c&&!h&&!Ie(S))throw F(`HTTP refused ${e}: untrustedUrl requires a pin-capable fetchImpl (see markPinCapableFetch in egress-guard.mjs) or no fetchImpl override so Oracle can pin the connection itself`);let _=new AbortController,k=setTimeout(()=>_.abort(),s),W=f?Ze?Ze([f,_.signal]):f:_.signal,J=async(w,{status:O=null}={})=>{let I=await xe(w,U);if(!I.ok)throw F(O==null?`HTTP refused ${w}: ${I.error}`:`HTTP redirect to ${w} ${I.error}`,O==null?{}:{status:O});let v=new URL(w).hostname;if(h){if(y&&(await y.close(),y=null),!y)try{y=await Te({requireUndici:!0,...p?{importUndici:p}:{}})}catch(m){throw F(O==null?`HTTP refused ${w}: ${m?.message||m}`:`HTTP redirect to ${w} refused: ${m?.message||m}`,O==null?{}:{status:O})}y.pin(v,I.addresses),S=y.fetch}else Je(S,v,I.addresses);return I};try{let w=String(e),O=Object.assign(Object.create(null),o||{});c&&await J(w);for(let I=0;I<=d;I+=1){let v=Object.assign(Object.create(null),{method:r,headers:O,body:n,signal:W,redirect:"manual",dispatcher:void 0}),m=await S(w,v);if((u==="error"||d===0)&&m.status>=300&&m.status<400)throw V(m),F(`HTTP ${m.status} ${r} redirect refused`,{status:m.status,redirectRefused:!0});if(rr.has(m.status)){let $=i===!0&&r==="POST"&&[307,308].includes(m.status)&&rt(r,n);if(r!=="GET"&&r!=="HEAD"&&!$){V(m);let T=new Error(`HTTP ${m.status} ${r} ${w} redirected non-idempotent request`);throw T.status=m.status,T}if(I===d)throw V(m),F(`HTTP ${m.status} ${r} redirect budget exhausted`,{status:m.status,redirectRefused:!0});let ke=m.headers?.get?.("location"),C;try{C=ar(ke,w)}catch(T){throw V(m),T}let D=!cr(C,w);if(V(m),D&&r==="POST"){let T=new Error(`HTTP ${m.status} ${r} cross-origin redirect refused`);throw T.status=m.status,T}if(D&&i){let T=new Error(`HTTP ${m.status} ${r} cross-origin redirect refused`);throw T.status=m.status,T.retryable=!1,T}if(D&&(O=ir(O)),c)await J(C,{status:m.status});else if(D){let T=await xe(C,U);if(!T.ok){let E=new Error(`HTTP redirect from ${w} ${T.error}`);throw E.status=m.status,E.retryable=!1,E}h&&T.addresses?.length&&(y||(y=await Te(p?{importUndici:p}:{})),y&&(y.pin(new URL(C).hostname,T.addresses),S=y.fetch))}w=C;continue}if(typeof b=="function")try{await b(m,{url:w})}catch($){throw V(m),F($?.message||String($))}let N=await mr(m,l,{url:w,onOversize:()=>_.abort()}),Y=yr(N);if(!m.ok){let $=new Error(`HTTP ${m.status} ${r} ${w}`);throw $.status=m.status,$.retryAfter=m.headers?.get?.("retry-after")??null,$.body=Y??N.slice(0,300),$}return Y??N}throw new Error(`HTTP redirect loop for ${e}`)}catch(w){if(_.signal.aborted&&!re(f)){let O=w&&(typeof w=="object"||typeof w=="function")&&!M.isProxy(w)?w:null,I=O?Object.getOwnPropertyDescriptor(O,"oversize"):null;if(!(I&&Object.hasOwn(I,"value")&&I.value===!0))try{if(!O)throw new TypeError("unsafe rejection");Object.defineProperties(O,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}})}catch{let m=new Error("HTTP request timed out");throw Object.defineProperties(m,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}}),m}}throw w}finally{clearTimeout(k),y&&await y.close()}}async function nt(e,t={}){if(t!=null&&typeof t!="object"&&typeof t!="function")throw new TypeError("HTTP options must be an object");if(t!=null&&M.isProxy(t))throw new TypeError("HTTP options must not be a proxy");let r=new Set(["body","dedupe","fetchImpl","headers","importUndici","lookupFn","maxRedirects","maxResponseBytes","method","redirectPolicy","retries","sameOriginRedirectsOnly","signal","timeoutMs","untrustedUrl","validateResponse"]);if(t!=null){if(Object.getOwnPropertySymbols(t).length>0)throw new TypeError("HTTP options contain unknown fields");for(let E of Object.getOwnPropertyNames(t)){let g=Object.getOwnPropertyDescriptor(t,E);if(!(E==="toJSON"&&g&&Object.hasOwn(g,"value")&&g.value===void 0)){if(!r.has(E))throw new TypeError("HTTP options contain unknown fields");if(!g||!g.enumerable||!Object.hasOwn(g,"value"))throw new TypeError("HTTP options must contain enumerable own data properties")}}}let o=E=>{if(t==null||!Object.hasOwn(t,E))return;let g=Object.getOwnPropertyDescriptor(t,E);if(!g||!Object.hasOwn(g,"value"))throw new TypeError("HTTP options must contain own data properties");return g.value};if(typeof e!="string"||e.length===0||e.length>8192)throw new TypeError("HTTP URL must be a bounded string");let n=o("method");if(n!==void 0&&(typeof n!="string"||!/^[A-Za-z]+$/u.test(n)))throw new TypeError("HTTP method must be a string token");let s=o("timeoutMs");if(s!==void 0&&(!Number.isInteger(s)||s<1||s>12e4))throw new TypeError("HTTP timeoutMs must be a bounded integer");let a=o("retries");if(a!==void 0&&(!Number.isInteger(a)||a<0||a>10))throw new TypeError("HTTP retries must be a bounded integer");let h=o("redirectPolicy");if(h!==void 0&&h!=="follow"&&h!=="error")throw new TypeError('HTTP redirectPolicy must be "follow" or "error"');let c=o("maxRedirects");if(c!==void 0&&(!Number.isInteger(c)||c<0||c>fe))throw new TypeError(`HTTP maxRedirects must be an integer from 0 through ${fe}`);if(h==="error"&&c!==void 0&&c!==0)throw new TypeError('HTTP redirectPolicy "error" requires maxRedirects 0 when supplied');let l=h??"follow",i=l==="error"?0:c??fe;for(let E of["dedupe","untrustedUrl","sameOriginRedirectsOnly"]){let g=o(E);if(g!==void 0&&typeof g!="boolean")throw new TypeError(`HTTP ${E} must be boolean`)}let p=o("maxResponseBytes");if(p!==void 0&&(!Number.isInteger(p)||p<1||p>64*1024*1024))throw new TypeError("HTTP maxResponseBytes must be a bounded integer");let b=o("signal");if(b!==void 0){if(M.isProxy(b)||!(b instanceof AbortSignal))throw new TypeError("HTTP signal must be a native AbortSignal");try{re(b)}catch{throw new TypeError("HTTP signal must be a native AbortSignal")}}for(let E of["importUndici","lookupFn","validateResponse"]){let g=o(E);if(g!==void 0&&typeof g!="function")throw new TypeError(`HTTP ${E} must be a function`)}let f=o("fetchImpl"),u=f||globalThis.fetch;if(typeof u!="function")throw new Error("fetch unavailable \u2014 pass opts.fetchImpl");let d=s??12e3,y=(n||"GET").toUpperCase(),S=o("headers"),U=sr(S),_=Object.assign(Object.create(null),U);Object.keys(_).some(E=>E.toLowerCase()==="accept")||(_.Accept="application/json");let k=o("body");k!=null&&typeof k!="string"&&(Object.keys(_).find(g=>g.toLowerCase()==="content-type")||(_["Content-Type"]="application/json"),k=or(k));let W=a??qt,J=o("lookupFn"),w=!f,O=o("untrustedUrl")===!0,I=o("sameOriginRedirectsOnly")===!0,v=o("importUndici"),m=o("validateResponse"),N=b,Y=p??null,$=async()=>{let E;for(let g=0;g<=W;g++){N&&Qt.call(N);let Le=ce("http");try{let L=await br(e,{fetchImpl:u,method:y,headers:_,body:k,timeoutMs:d,lookupFn:J,realFetch:w,untrustedUrl:O,maxResponseBytes:Y,sameOriginRedirectsOnly:I,importUndici:v,validateResponse:m,signal:N,redirectPolicy:l,maxRedirects:i});return Le?.("succeeded"),L}catch(L){E=L;let K=de=>{if(!L||typeof L!="object"&&typeof L!="function"||M.isProxy(L))return;let q=Object.getOwnPropertyDescriptor(L,de);return q&&Object.hasOwn(q,"value")?q.value:void 0},se=K("status");Le?.("failed",se);let ft=K("oracleTimeout")===!0||K("name")==="AbortError"||K("name")==="TimeoutError"||re(N),dt=new Set([408,425,429]),pt=K("retryable")===!1?!1:se!=null?dt.has(se)||Yt.has(se)&&Ye.has(y):!ft&&Ye.has(y);if(g===W||!pt)throw L;let je=dr(g,K("retryAfter")),ht=ce("retry"),He=!1;try{N?await new Promise((de,q)=>{let Me,X=()=>{clearTimeout(Me),Xe.call(N,"abort",X),q(tr(N)||new DOMException("Aborted","AbortError"))};if(re(N)){X();return}Me=setTimeout(()=>{Xe.call(N,"abort",X),de()},je),er.call(N,"abort",X,{once:!0}),re(N)&&X()}):await pr(je),He=!0}finally{ht?.(He?"succeeded":"failed")}}}throw E};if(!(o("dedupe")!==!1&&!N&&rt(y,k)))return $();let C=fr(y,e,_,{untrustedUrl:O,maxResponseBytes:Y,sameOriginRedirectsOnly:I,redirectPolicy:l,maxRedirects:i,timeoutMs:d,retries:W,fetchImpl:le(u),realFetch:w,lookupFn:le(J),importUndici:le(v),validateResponse:le(m)},k),D=Ne.get(C);if(D){let E=ce("shared");try{let g=await D;return E?.("succeeded"),g}catch(g){throw E?.("failed"),g}}let T=$().finally(()=>Ne.delete(C));return Ne.set(C,T),T}var _e={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},elysium:{chainId:1339,name:"Elysium",rpcEnv:["ELYSIUM_RPC_URL"],evm:!0,readOnly:!0}};var wr=new Map(Object.values(_e).map(e=>[e.chainId,e]));function ot(e){return wr.get(Number(e))||null}function st(e,t=process.env){let r=ot(e);if(!r)return null;for(let o of r.rpcEnv){let n=(t[o]||"").trim();if(n)return n}return null}import{Interface as gr,getAddress as Er}from"ethers";var xn=new gr(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);function $e(e,t){try{return Er(e).toLowerCase()}catch{throw new Error(`${t} must be a valid EVM address`)}}function Sr(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 Pe(e){return e==null?null:Number.parseInt(String(e),16)}var Ar={1:"https://ethereum.publicnode.com",137:"https://polygon-bor-rpc.publicnode.com",42161:"https://arbitrum-one-rpc.publicnode.com",8453:"https://base-rpc.publicnode.com",10:"https://optimism-rpc.publicnode.com",988:"https://rpc.stable.xyz",56:"https://bsc-rpc.publicnode.com",43114:"https://avalanche-c-chain-rpc.publicnode.com",999:"https://rpc.hyperliquid.xyz/evm",2741:"https://api.mainnet.abs.xyz",4663:"https://rpc.mainnet.chain.robinhood.com",1339:"https://rpc.elysiumchain.tech"};function xr(e,{rpcUrl:t,env:r=process.env}={}){if(t)return t;let o=st(e,r);return o||Ar[Number(e)]||null}var Tr=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/;function Or(e){let t=String(e||""),r=t.toLowerCase();if(t!==t.trim()||!/^[a-zA-Z0-9_]+$/.test(t)||!Tr.test(r))throw new Error(`evm-rpc: ${t} refused \u2014 @oracle-agent/oracle is prepare-only (read RPC only; no broadcast/sign)`);return r}var ne=new Map,it=new Map;function Ir(e){let t=new Error(e?.message||JSON.stringify(e));return t.code=e?.code,t}function Nr(e){if(e?.error)throw Ir(e.error);return e?.result}function Rr(e,t,r){return`${e}
3
3
  ${t}
4
4
  ${JSON.stringify(r??[])}`}async function _r(e,t,r){return nt(e,{method:"POST",body:t,fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3,signal:r.signal})}async function Ce(e,t,r=[],o={}){let n=String(t||""),s=Or(n),a=xr(e,o);if(!a)throw new Error(`No RPC URL for chainId ${e} (set env from chain registry rpcEnv or pass rpcUrl)`);if(s==="eth_chainid"&&o.cacheChainId!==!1){let i=it.get(a);if(i!=null)return i}let c=o.dedupe!==!1&&!o.signal?Rr(a,n,r):null;if(c&&ne.has(c))return ne.get(c);let l=(async()=>{let i=await _r(a,{jsonrpc:"2.0",id:1,method:t,params:r},o),p=Nr(i);return s==="eth_chainid"&&typeof p=="string"&&it.set(a,p),p})();return c&&(ne.set(c,l),l.finally(()=>{ne.get(c)===l&&ne.delete(c)}).catch(()=>{})),l}async function at(e={},t={}){let r=Number(e.chainId??t.chainId??1),o=Sr(e.txHash||e.hash||e.transactionHash),n=await Ce(r,"eth_getTransactionReceipt",[o],t);if(!n)return{ok:!1,chainId:r,txHash:o,status:"pending",receipt:null,reason:"receipt pending"};let s=Pe(n.status),a=s===1,h=s===1?"success":s===0?"reverted":"unknown",c=a?null:h==="reverted"?"transaction reverted":"unknown receipt status",l=e.expectedTo?$e(e.expectedTo,"expectedTo"):null,i=n.to?$e(n.to,"receipt.to"):null;return l&&i!==l&&(a=!1,c=`to mismatch: expected ${l}, got ${i||"null"}`),{ok:a,chainId:r,txHash:o,status:h,reason:c,statusCode:s,to:i,from:n.from?$e(n.from,"receipt.from"):null,blockNumber:Pe(n.blockNumber),transactionIndex:Pe(n.transactionIndex),logs:Array.isArray(n.logs)?n.logs:[],receipt:n}}var $r=/^0x[0-9a-f]{64}$/;function Pr(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 Cr({txHash:e,chainId:t,rpcUrl:r},o={}){let n=String(e||"").trim().toLowerCase();if(!$r.test(n))throw new TypeError("observe receipt: txHash must be a 32-byte hash");let s=Number(t);if(!Number.isSafeInteger(s)||s<=0)throw new TypeError("observe receipt: chainId required");let a=o.transactionReceipt||at,h=o.rpcCall||Ce,c={...o.rpcOptions||{},...r?{rpcUrl:r}:{}},l;try{l=await a({txHash:n,chainId:s},c)}catch(f){return{observation:null,reason:`RPC_UNAVAILABLE: ${f.message}`}}if(!l||l.receipt==null)return{observation:null,reason:l?.reason||"receipt pending"};let i=null,p=l.blockNumber;if(Number.isSafeInteger(p))try{let f=Pr(await h(s,"eth_blockNumber",[],c));f!=null&&f>=p&&(i=f-p+1)}catch{}let b={txHash:n,family:"evm",chainId:String(s),receiptStatus:l.status==="success"?"SUCCESS":l.status==="reverted"?"FAIL":"UNKNOWN",block:p==null?void 0:String(p),observedAt:new Date().toISOString(),finality:{status:"LIVE",...i==null?{}:{confirmations:i}}};return i!=null&&(b.confirmations=i),{observation:b,reason:null}}async function ct({txHash:e,chainId:t,confirmations:r=1,rpcUrl:o},n={}){let{observation:s,reason:a}=await Cr({txHash:e,chainId:t,rpcUrl:o},n),h=ae({txHash:String(e).trim().toLowerCase(),family:"evm",chainId:String(Number(t)),finalityRule:{rule:"confirmations",confirmations:r},...s?{observation:s}:{}});return{receipt:h,observed:!!s,final:h.finalityState==="FINAL",requiredConfirmations:r,reason:a}}var ut={SUCCESS:0,FAIL:2,UNKNOWN:3};function oe(e,t){let r=e.find(n=>n.startsWith(`--${t}=`));if(r)return r.split("=").slice(1).join("=");let o=e.indexOf(`--${t}`);return o>=0?e[o+1]:void 0}function lt(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
  `)}
@@ -1,7 +1,7 @@
1
- import{keccak_256 as de}from"@noble/hashes/sha3.js";import{createHash as at}from"node:crypto";import{types as N}from"node:util";import{AsyncLocalStorage as qe}from"node:async_hooks";var Ze=new qe,Qe=["http","retry","shared"],et=512;function q(t){let e=Ze.getStore();if(!e||e.closed||!Qe.includes(t))return null;if(e.spans.length>=et)return e.droppedSpans++,null;let r={stage:t,startMs:e.now()-e.start,durationMs:null,outcome:"pending",status:null};return e.spans.push(r),(n,o=null)=>{e.closed||r.durationMs!==null||(r.durationMs=Math.max(0,e.now()-e.start-r.startMs),r.outcome=n==="succeeded"?"succeeded":"failed",r.status=Number.isInteger(o)&&o>=100&&o<=599?o:null)}}import M from"node:net";import tt from"node:dns";var rt=new Set(["localhost","metadata.google.internal","metadata.goog"]);function Z(t){let e=String(t).toLowerCase().split("%")[0];if((e.match(/::/g)||[]).length>1)return null;let r=s=>{if(!s)return[];let p=s.split(":"),T=p.at(-1);if(T?.includes(".")){let l=T.split(".").map(Number);if(l.length!==4||l.some(u=>!Number.isInteger(u)||u<0||u>255))return null;p.splice(p.length-1,1,(l[0]<<8|l[1]).toString(16),(l[2]<<8|l[3]).toString(16))}return p.some(l=>!/^[0-9a-f]{1,4}$/.test(l))?null:p.map(l=>Number.parseInt(l,16))},[n,o]=e.split("::"),a=r(n),i=r(o);if(!a||!i)return null;let d=e.includes("::"),c=8-a.length-i.length;if(!d&&c!==0||d&&c<1)return null;let h=[...a,...Array(Math.max(0,c)).fill(0),...i];return h.length!==8?null:Uint8Array.from(h.flatMap(s=>[s>>8,s&255]))}function ne(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 a=255<<8-o;return(t[n]&a)===(e[n]&a)}function oe(t){if(M.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(M.isIPv6(t)){let e=Z(t);if(!e)return!1;let r=Z("::ffff:0:0");return ne(e,r,96)?oe([...e.slice(12)].join(".")):ne(e,Z("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([o,a])=>ne(e,Z(o),a)):!1}return!1}function nt(t){let e;try{e=new URL(String(t))}catch{return{ok:!1,error:`not a valid URL: ${String(t).slice(0,120)}`}}if(e.protocol!=="http:"&&e.protocol!=="https:")return{ok:!1,error:`refused protocol ${e.protocol} (only http/https)`};let r=e.hostname.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,"");if(rt.has(r)||r.endsWith(".localhost")||r.endsWith(".internal"))return{ok:!1,error:`refused internal host ${r}`};let n=M.isIP(r);return n!==0&&!oe(r)?{ok:!1,error:`refused private address ${r}`}:{ok:!0,url:e,host:r,isLiteralIp:n!==0}}async function se(t,{lookupFn:e=tt.promises.lookup}={}){let r=nt(t);if(!r.ok)return r;if(r.isLiteralIp)return{ok:!0,url:r.url,addresses:[{address:r.host,family:M.isIPv6(r.host)?6:4}]};let n;if(process.env.ORACLE_HOSTED_EGRESS_PROXY)return{ok:!0,url:r.url,addresses:[]};try{n=await e(r.host,{all:!0,verbatim:!0})}catch{return{ok:!1,error:`refused: ${r.host} did not resolve`}}return!Array.isArray(n)||n.length===0||n.some(o=>!oe(o.address))?{ok:!1,error:`refused: ${r.host} resolves to a non-public address`}:{ok:!0,url:r.url,addresses:n}}function ot(t=process.env){let e=t.ORACLE_HOSTED_EGRESS_PROXY||"";if(!e)return null;let r;try{r=new URL(e)}catch{throw new Error("egress-guard: ORACLE_HOSTED_EGRESS_PROXY is not a URL")}if(r.protocol!=="http:"||!["127.0.0.1","::1","localhost","[::1]"].includes(r.hostname)||!r.port||r.username||r.password)throw new Error("egress-guard: egress proxy must be an exact loopback http origin");let n=t.ORACLE_HOSTED_EGRESS_TOKEN||"";if(!/^[A-Za-z0-9_-]{43}$/.test(n))throw new Error("egress-guard: egress proxy token is missing");return{uri:r.origin,token:n}}async function ae({requireUndici:t=!1,importUndici:e=()=>import("undici")}={}){let r,n,o;try{o=await e(),r=o.Agent,n=o.fetch}catch(l){if(t)throw new Error(`egress-guard: untrustedUrl pinning requires the undici package, which failed to load: ${l?.message||l}`);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 a=l=>String(l).toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,""),i=new Map,d=l=>(Array.isArray(l)?l:[l]).map(u=>typeof u=="string"?{address:u}:u).filter(u=>u&&u.address).map(u=>({address:u.address,family:u.family||(M.isIPv6(u.address)?6:4)})),c=(l,u,g)=>{i.set(a(l),d(typeof u=="string"?[{address:u,family:g}]:u))},h=l=>{let u=a(l);if(M.isIP(u))return[{address:u,family:M.isIPv6(u)?6:4}];let g=i.get(u);if(!g||!g.length)throw new Error(`refused: unpinned host ${l} during pinned fetch`);return g},s=ot(),p=s&&typeof o.ProxyAgent=="function"?new o.ProxyAgent({uri:s.uri,token:`Bearer ${s.token}`,connectTimeout:1e4}):new r({connect:{lookup(l,u,g){let m;try{m=h(l)}catch(S){return g(S)}return u?.all?g(null,m):g(null,m[0].address,m[0].family)}}}),T=st((l,u={})=>n(l,{...u,dispatcher:p}),c);return{dispatcher:p,fetch:T,pin:c,resolve:h,async close(){try{await p.destroy()}catch{}}}}var ie=Symbol.for("oracle.egressGuard.pinCapableFetch");function st(t,e){if(typeof t!="function")throw new Error("markPinCapableFetch: fetchImpl must be a function");if(typeof e!="function")throw new Error("markPinCapableFetch: pin must be a function");return t[ie]=Object.freeze({pin:e}),t}function ce(t){return typeof t=="function"&&typeof t[ie]?.pin=="function"}function Se(t,e,r){if(!ce(t))throw new Error("pinFetchToAddresses: fetchImpl is not pin-capable");t[ie].pin(e,r)}var it=new Set([408,425,429,500,502,503,504]),Oe=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),ct=2,Re=4e3,ut=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"aborted")?.get,lt=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"reason")?.get,ft=AbortSignal.prototype.throwIfAborted,dt=EventTarget.prototype.addEventListener,Pe=EventTarget.prototype.removeEventListener,Ae=typeof AbortSignal.any=="function"?AbortSignal.any.bind(AbortSignal):null,W=t=>t?ut.call(t):!1,pt=t=>t?lt.call(t):void 0,ht=new Set([301,302,303,307,308]),ee=3,ar=64*1024,C=Object.freeze({depth:32,nodes:1e4,fields:1e4,arrayLength:1e4,bytes:1024*1024});function E(t){return j(`HTTP JSON body refused: ${t}`)}function mt(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 N[e]=="function"&&N[e](t))}function yt(t){let e=[],r=0,n=0,o=0,a=0,i=new WeakSet,d=s=>{if(r+=Buffer.byteLength(s,"utf8"),r>C.bytes)throw E("serialized byte limit exceeded");e.push(s)},c=s=>{if(Buffer.byteLength(s,"utf8")>C.bytes)throw E("serialized byte limit exceeded");return JSON.stringify(s)},h=(s,p)=>{if(n+=1,n>C.nodes)throw E("node limit exceeded");if(p>C.depth)throw E("depth limit exceeded");if(s===null){d("null");return}if(typeof s=="string"){d(c(s));return}if(typeof s=="boolean"){d(s?"true":"false");return}if(typeof s=="number"){if(!Number.isFinite(s))throw E("non-finite number");d(Object.is(s,-0)?"0":String(s));return}if(typeof s!="object")throw E("unsupported non-JSON value");if(N.isProxy(s))throw E("proxy value");if(mt(s))throw E("unsupported exotic object");if(i.has(s))throw E("cyclic value");i.add(s);try{if(Object.getOwnPropertySymbols(s).length>0)throw E("symbol-keyed fields are unsupported");if(Array.isArray(s)){let u=Object.getPrototypeOf(s),g=0;for(;u!==null;){if(N.isProxy(u))throw E("proxy array prototype");if(g+=1,g>C.depth)throw E("array prototype depth limit exceeded");u=Object.getPrototypeOf(u)}if(s.length>C.arrayLength)throw E("array length limit exceeded");for(let S=0;S<s.length;S+=1){let H=Object.getOwnPropertyDescriptor(s,String(S));if(!H||!Object.hasOwn(H,"value")||H.enumerable!==!0)throw E("array entries must be dense enumerable own data")}let m=0;for(let S in s){if(a+=1,a>C.fields)throw E("enumeration limit exceeded");if(Object.hasOwn(s,S)&&(m+=1,m>s.length))throw E("named array fields are unsupported")}if(m!==s.length)throw E("array entries must be dense enumerable own data");d("[");for(let S=0;S<s.length;S+=1)S&&d(","),h(Object.getOwnPropertyDescriptor(s,String(S)).value,p+1);d("]");return}let T=Object.getPrototypeOf(s);if(T!==Object.prototype&&T!==null)throw E("non-plain object");let l=[];for(let u in s){if(a+=1,a>C.fields)throw E("enumeration limit exceeded");if(!Object.hasOwn(s,u))continue;if(o+=1,o>C.fields)throw E("field limit exceeded");let g=Object.getOwnPropertyDescriptor(s,u);if(!g||!Object.hasOwn(g,"value")||g.enumerable!==!0)throw E("object fields must be enumerable own data");l.push([u,g.value])}d("{");for(let u=0;u<l.length;u+=1)u&&d(","),d(c(l[u][0])),d(":"),h(l[u][1],p+1);d("}")}finally{i.delete(s)}};return h(t,0),e.join("")}function wt(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(N.isProxy(t))throw new TypeError("HTTP headers must not be a proxy");if(Object.getOwnPropertySymbols(t).length>0)throw new TypeError("HTTP headers must not contain symbol fields");let r=new Set;for(let n of Object.keys(t)){if(!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/u.test(n))throw new TypeError("HTTP header names must be valid tokens");let o=n.toLowerCase();if(r.has(o))throw new TypeError("HTTP headers contain a duplicate canonical name");r.add(o);let a=Object.getOwnPropertyDescriptor(t,n);if(!a||!Object.hasOwn(a,"value"))throw new TypeError("HTTP headers must contain own data properties");let i=a.value;if(i==null||["object","function","symbol"].includes(typeof i))throw new TypeError("HTTP header values must be scalar");e[n]=String(i)}return e}function bt(){return Object.assign(Object.create(null),{Accept:"application/json"})}function gt(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 Tt(t,e){return new URL(String(t)).origin===new URL(String(e)).origin}var ue=new Map,xe=new WeakMap,ve=1;function Q(t){if((typeof t!="object"||t===null)&&typeof t!="function")return`${typeof t}:${String(t)}`;let e=xe.get(t);return e||(e=ve,ve+=1,xe.set(t,e)),`reference:${e}`}var Et=new Set(["eth_blockNumber","eth_call","eth_chainId","eth_estimateGas","getHealth","minimumLedgerSlot","net_version","simulateTransaction","web3_clientVersion"]),St=new Set(["allMids","l2Book","outcomeMeta","spotClearinghouseState","userFills","meta","metaAndAssetCtxs","perpDexs","candleSnapshot","fundingHistory","openOrders","frontendOpenOrders","clearinghouseState","spotMeta","validatorSummaries","delegatorSummary","delegations","delegatorRewards","delegatorHistory","maxBuilderFee"]);function _e(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?Et.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 Ie(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(_e);if(!r||typeof r!="object")return!1;if(Object.hasOwn(r,"jsonrpc")||Object.hasOwn(r,"method"))return _e(r);let n=Object.hasOwn(r,"type")?r.type:null;return typeof n=="string"&&St.has(n)&&(!Object.hasOwn(r,"action")||r.action==null)&&(!Object.hasOwn(r,"signature")||r.signature==null)&&(!Object.hasOwn(r,"nonce")||r.nonce==null)}function Ot(t,e,r,n={},o=null){let a=at("sha256"),i=(c,h)=>{let s=String(h);a.update(String(Buffer.byteLength(c,"utf8"))).update(":").update(c),a.update("=").update(String(Buffer.byteLength(s,"utf8"))).update(":").update(s).update(`
2
- `)};i("method",t),i("url",e),Object.keys(r||{}).map((c,h)=>({name:c.toLowerCase(),order:h,value:String(r[c])})).sort((c,h)=>c.name.localeCompare(h.name)||c.order-h.order).forEach((c,h)=>{i(`header-name-${h}`,c.name),i(`header-value-${h}`,c.value)}),i("body",o??"-");for(let c of["untrustedUrl","maxResponseBytes","sameOriginRedirectsOnly","redirectPolicy","maxRedirects","timeoutMs","retries","fetchImpl","realFetch","lookupFn","importUndici","validateResponse"])i(`context-${c}`,n[c]??"-");return a.digest("hex")}function Rt(t,e){let r=Number(e);return Number.isFinite(r)&&r>0?Math.min(r*1e3,Re):Math.min(250*2**t,Re)+Math.floor(Math.random()*100)}var Pt=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 le(t,e,r){return j(`HTTP response from ${t} exceeded maxResponseBytes ${r} (${e})`,{oversize:!0})}function B(t){try{let e=t?.body?.cancel?.();e&&typeof e.then=="function"&&e.catch(()=>{})}catch{}}function At(t){return t?t.byteLength??t.length??0:0}async function xt(t,e,{url:r,truncate:n=!1,onOversize:o}={}){if(e==null)return await t.text();let a=Number(t.headers?.get?.("content-length"));if(Number.isFinite(a)&&a>e&&(B(t),!n))throw le(r,`content-length ${a}`,e);let i=t.body?.getReader?.();if(!i){let p=await t.text(),T=Buffer.byteLength(p,"utf8");if(T>e){if(!n)throw le(r,`body ${T} bytes`,e);return Buffer.from(p,"utf8").subarray(0,e).toString("utf8")}return p}let d=[],c=0,h=!1;try{for(;;){let{value:p,done:T}=await i.read();if(T)break;if(p&&(d.push(Buffer.from(p)),c+=At(p),c>e)){h=!0;break}}}finally{if(h)try{await i.cancel()}catch{}try{i.releaseLock?.()}catch{}}if(h&&(typeof o=="function"&&o(),!n))throw le(r,`streamed ${c} bytes`,e);let s=Buffer.concat(d);return(h?s.subarray(0,e):s).toString("utf8")}function vt(t){if(!t)return null;try{return JSON.parse(t)}catch{return null}}async function _t(t,{fetchImpl:e,method:r,headers:n,body:o,timeoutMs:a,lookupFn:i,realFetch:d,untrustedUrl:c=!1,maxResponseBytes:h=null,sameOriginRedirectsOnly:s=!1,importUndici:p,validateResponse:T,signal:l,redirectPolicy:u="follow",maxRedirects:g=ee}){let m=null,S=e,H=i?{lookupFn:i}:{};if(c&&!d&&!ce(S))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 x=new AbortController,I=setTimeout(()=>x.abort(),a),G=l?Ae?Ae([l,x.signal]):l:x.signal,z=async(y,{status:R=null}={})=>{let P=await se(y,H);if(!P.ok)throw j(R==null?`HTTP refused ${y}: ${P.error}`:`HTTP redirect to ${y} ${P.error}`,R==null?{}:{status:R});let $=new URL(y).hostname;if(d){if(m&&(await m.close(),m=null),!m)try{m=await ae({requireUndici:!0,...p?{importUndici:p}:{}})}catch(f){throw j(R==null?`HTTP refused ${y}: ${f?.message||f}`:`HTTP redirect to ${y} refused: ${f?.message||f}`,R==null?{}:{status:R})}m.pin($,P.addresses),S=m.fetch}else Se(S,$,P.addresses);return P};try{let y=String(t),R=Object.assign(Object.create(null),n||{});c&&await z(y);for(let P=0;P<=g;P+=1){let $=Object.assign(Object.create(null),{method:r,headers:R,body:o,signal:G,redirect:"manual",dispatcher:void 0}),f=await S(y,$);if((u==="error"||g===0)&&f.status>=300&&f.status<400)throw B(f),j(`HTTP ${f.status} ${r} redirect refused`,{status:f.status,redirectRefused:!0});if(ht.has(f.status)){let v=s===!0&&r==="POST"&&[307,308].includes(f.status)&&Ie(r,o);if(r!=="GET"&&r!=="HEAD"&&!v){B(f);let O=new Error(`HTTP ${f.status} ${r} ${y} redirected non-idempotent request`);throw O.status=f.status,O}if(P===g)throw B(f),j(`HTTP ${f.status} ${r} redirect budget exhausted`,{status:f.status,redirectRefused:!0});let we=f.headers?.get?.("location"),_;try{_=gt(we,y)}catch(O){throw B(f),O}let L=!Tt(_,y);if(B(f),L&&r==="POST"){let O=new Error(`HTTP ${f.status} ${r} cross-origin redirect refused`);throw O.status=f.status,O}if(L&&s){let O=new Error(`HTTP ${f.status} ${r} cross-origin redirect refused`);throw O.status=f.status,O.retryable=!1,O}if(L&&(R=bt(R)),c)await z(_,{status:f.status});else if(L){let O=await se(_,H);if(!O.ok){let b=new Error(`HTTP redirect from ${y} ${O.error}`);throw b.status=f.status,b.retryable=!1,b}d&&O.addresses?.length&&(m||(m=await ae(p?{importUndici:p}:{})),m&&(m.pin(new URL(_).hostname,O.addresses),S=m.fetch))}y=_;continue}if(typeof T=="function")try{await T(f,{url:y})}catch(v){throw B(f),j(v?.message||String(v))}let A=await xt(f,h,{url:y,onOversize:()=>x.abort()}),V=vt(A);if(!f.ok){let v=new Error(`HTTP ${f.status} ${r} ${y}`);throw v.status=f.status,v.retryAfter=f.headers?.get?.("retry-after")??null,v.body=V??A.slice(0,300),v}return V??A}throw new Error(`HTTP redirect loop for ${t}`)}catch(y){if(x.signal.aborted&&!W(l)){let R=y&&(typeof y=="object"||typeof y=="function")&&!N.isProxy(y)?y:null,P=R?Object.getOwnPropertyDescriptor(R,"oversize"):null;if(!(P&&Object.hasOwn(P,"value")&&P.value===!0))try{if(!R)throw new TypeError("unsafe rejection");Object.defineProperties(R,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}})}catch{let f=new Error("HTTP request timed out");throw Object.defineProperties(f,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}}),f}}throw y}finally{clearTimeout(I),m&&await m.close()}}async function ke(t,e={}){if(e!=null&&typeof e!="object"&&typeof e!="function")throw new TypeError("HTTP options must be an object");if(e!=null&&N.isProxy(e))throw new TypeError("HTTP options must not be a proxy");let r=new Set(["body","dedupe","fetchImpl","headers","importUndici","lookupFn","maxRedirects","maxResponseBytes","method","redirectPolicy","retries","sameOriginRedirectsOnly","signal","timeoutMs","untrustedUrl","validateResponse"]);if(e!=null){if(Object.getOwnPropertySymbols(e).length>0)throw new TypeError("HTTP options contain unknown fields");for(let b of Object.getOwnPropertyNames(e)){let w=Object.getOwnPropertyDescriptor(e,b);if(!(b==="toJSON"&&w&&Object.hasOwn(w,"value")&&w.value===void 0)){if(!r.has(b))throw new TypeError("HTTP options contain unknown fields");if(!w||!w.enumerable||!Object.hasOwn(w,"value"))throw new TypeError("HTTP options must contain enumerable own data properties")}}}let n=b=>{if(e==null||!Object.hasOwn(e,b))return;let w=Object.getOwnPropertyDescriptor(e,b);if(!w||!Object.hasOwn(w,"value"))throw new TypeError("HTTP options must contain own data properties");return w.value};if(typeof t!="string"||t.length===0||t.length>8192)throw new TypeError("HTTP URL must be a bounded string");let o=n("method");if(o!==void 0&&(typeof o!="string"||!/^[A-Za-z]+$/u.test(o)))throw new TypeError("HTTP method must be a string token");let a=n("timeoutMs");if(a!==void 0&&(!Number.isInteger(a)||a<1||a>12e4))throw new TypeError("HTTP timeoutMs must be a bounded integer");let i=n("retries");if(i!==void 0&&(!Number.isInteger(i)||i<0||i>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 c=n("maxRedirects");if(c!==void 0&&(!Number.isInteger(c)||c<0||c>ee))throw new TypeError(`HTTP maxRedirects must be an integer from 0 through ${ee}`);if(d==="error"&&c!==void 0&&c!==0)throw new TypeError('HTTP redirectPolicy "error" requires maxRedirects 0 when supplied');let h=d??"follow",s=h==="error"?0:c??ee;for(let b of["dedupe","untrustedUrl","sameOriginRedirectsOnly"]){let w=n(b);if(w!==void 0&&typeof w!="boolean")throw new TypeError(`HTTP ${b} must be boolean`)}let p=n("maxResponseBytes");if(p!==void 0&&(!Number.isInteger(p)||p<1||p>64*1024*1024))throw new TypeError("HTTP maxResponseBytes must be a bounded integer");let T=n("signal");if(T!==void 0){if(N.isProxy(T)||!(T instanceof AbortSignal))throw new TypeError("HTTP signal must be a native AbortSignal");try{W(T)}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 l=n("fetchImpl"),u=l||globalThis.fetch;if(typeof u!="function")throw new Error("fetch unavailable \u2014 pass opts.fetchImpl");let g=a??12e3,m=(o||"GET").toUpperCase(),S=n("headers"),H=wt(S),x=Object.assign(Object.create(null),H);Object.keys(x).some(b=>b.toLowerCase()==="accept")||(x.Accept="application/json");let I=n("body");I!=null&&typeof I!="string"&&(Object.keys(x).find(w=>w.toLowerCase()==="content-type")||(x["Content-Type"]="application/json"),I=yt(I));let G=i??ct,z=n("lookupFn"),y=!l,R=n("untrustedUrl")===!0,P=n("sameOriginRedirectsOnly")===!0,$=n("importUndici"),f=n("validateResponse"),A=T,V=p??null,v=async()=>{let b;for(let w=0;w<=G;w++){A&&ft.call(A);let be=q("http");try{let k=await _t(t,{fetchImpl:u,method:m,headers:x,body:I,timeoutMs:g,lookupFn:z,realFetch:y,untrustedUrl:R,maxResponseBytes:V,sameOriginRedirectsOnly:P,importUndici:$,validateResponse:f,signal:A,redirectPolicy:h,maxRedirects:s});return be?.("succeeded"),k}catch(k){b=k;let F=re=>{if(!k||typeof k!="object"&&typeof k!="function"||N.isProxy(k))return;let J=Object.getOwnPropertyDescriptor(k,re);return J&&Object.hasOwn(J,"value")?J.value:void 0},K=F("status");be?.("failed",K);let Ye=F("oracleTimeout")===!0||F("name")==="AbortError"||F("name")==="TimeoutError"||W(A),We=new Set([408,425,429]),Xe=F("retryable")===!1?!1:K!=null?We.has(K)||it.has(K)&&Oe.has(m):!Ye&&Oe.has(m);if(w===G||!Xe)throw k;let ge=Rt(w,F("retryAfter")),Ke=q("retry"),Te=!1;try{A?await new Promise((re,J)=>{let Ee,Y=()=>{clearTimeout(Ee),Pe.call(A,"abort",Y),J(pt(A)||new DOMException("Aborted","AbortError"))};if(W(A)){Y();return}Ee=setTimeout(()=>{Pe.call(A,"abort",Y),re()},ge),dt.call(A,"abort",Y,{once:!0}),W(A)&&Y()}):await Pt(ge),Te=!0}finally{Ke?.(Te?"succeeded":"failed")}}}throw b};if(!(n("dedupe")!==!1&&!A&&Ie(m,I)))return v();let _=Ot(m,t,x,{untrustedUrl:R,maxResponseBytes:V,sameOriginRedirectsOnly:P,redirectPolicy:h,maxRedirects:s,timeoutMs:g,retries:G,fetchImpl:Q(u),realFetch:y,lookupFn:Q(z),importUndici:Q($),validateResponse:Q(f)},I),L=ue.get(_);if(L){let b=q("shared");try{let w=await L;return b?.("succeeded"),w}catch(w){throw b?.("failed"),w}}let O=v().finally(()=>ue.delete(_));return ue.set(_,O),O}var fe={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}};var It=new Map(Object.values(fe).map(t=>[t.chainId,t]));function Ce(t){return It.get(Number(t))||null}function Ne(t,e=process.env){let r=Ce(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 kt,getAddress as mr}from"ethers";var yr=new kt(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);var Ct={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 Nt(t,{rpcUrl:e,env:r=process.env}={}){if(e)return e;let n=Ne(t,r);return n||Ct[Number(t)]||null}var Ht=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/;function $t(t){let e=String(t||""),r=e.toLowerCase();if(e!==e.trim()||!/^[a-zA-Z0-9_]+$/.test(e)||!Ht.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 X=new Map,He=new Map;function jt(t){let e=new Error(t?.message||JSON.stringify(t));return e.code=t?.code,e}function Lt(t){if(t?.error)throw jt(t.error);return t?.result}function Mt(t,e,r){return`${t}
1
+ import{keccak_256 as de}from"@noble/hashes/sha3.js";import{createHash as at}from"node:crypto";import{types as k}from"node:util";import{AsyncLocalStorage as qe}from"node:async_hooks";var Ze=new qe,Qe=["http","retry","shared"],et=512;function q(t){let e=Ze.getStore();if(!e||e.closed||!Qe.includes(t))return null;if(e.spans.length>=et)return e.droppedSpans++,null;let r={stage:t,startMs:e.now()-e.start,durationMs:null,outcome:"pending",status:null};return e.spans.push(r),(n,o=null)=>{e.closed||r.durationMs!==null||(r.durationMs=Math.max(0,e.now()-e.start-r.startMs),r.outcome=n==="succeeded"?"succeeded":"failed",r.status=Number.isInteger(o)&&o>=100&&o<=599?o:null)}}import j from"node:net";import tt from"node:dns";var rt=new Set(["localhost","metadata.google.internal","metadata.goog"]);function Z(t){let e=String(t).toLowerCase().split("%")[0];if((e.match(/::/g)||[]).length>1)return null;let r=s=>{if(!s)return[];let p=s.split(":"),E=p.at(-1);if(E?.includes(".")){let l=E.split(".").map(Number);if(l.length!==4||l.some(u=>!Number.isInteger(u)||u<0||u>255))return null;p.splice(p.length-1,1,(l[0]<<8|l[1]).toString(16),(l[2]<<8|l[3]).toString(16))}return p.some(l=>!/^[0-9a-f]{1,4}$/.test(l))?null:p.map(l=>Number.parseInt(l,16))},[n,o]=e.split("::"),a=r(n),i=r(o);if(!a||!i)return null;let d=e.includes("::"),c=8-a.length-i.length;if(!d&&c!==0||d&&c<1)return null;let h=[...a,...Array(Math.max(0,c)).fill(0),...i];return h.length!==8?null:Uint8Array.from(h.flatMap(s=>[s>>8,s&255]))}function ne(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 a=255<<8-o;return(t[n]&a)===(e[n]&a)}function oe(t){if(j.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(j.isIPv6(t)){let e=Z(t);if(!e)return!1;let r=Z("::ffff:0:0");return ne(e,r,96)?oe([...e.slice(12)].join(".")):ne(e,Z("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([o,a])=>ne(e,Z(o),a)):!1}return!1}function nt(t){let e;try{e=new URL(String(t))}catch{return{ok:!1,error:`not a valid URL: ${String(t).slice(0,120)}`}}if(e.protocol!=="http:"&&e.protocol!=="https:")return{ok:!1,error:`refused protocol ${e.protocol} (only http/https)`};let r=e.hostname.toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,"");if(rt.has(r)||r.endsWith(".localhost")||r.endsWith(".internal"))return{ok:!1,error:`refused internal host ${r}`};let n=j.isIP(r);return n!==0&&!oe(r)?{ok:!1,error:`refused private address ${r}`}:{ok:!0,url:e,host:r,isLiteralIp:n!==0}}async function se(t,{lookupFn:e=tt.promises.lookup}={}){let r=nt(t);if(!r.ok)return r;if(r.isLiteralIp)return{ok:!0,url:r.url,addresses:[{address:r.host,family:j.isIPv6(r.host)?6:4}]};let n;if(process.env.ORACLE_HOSTED_EGRESS_PROXY)return{ok:!0,url:r.url,addresses:[]};try{n=await e(r.host,{all:!0,verbatim:!0})}catch{return{ok:!1,error:`refused: ${r.host} did not resolve`}}return!Array.isArray(n)||n.length===0||n.some(o=>!oe(o.address))?{ok:!1,error:`refused: ${r.host} resolves to a non-public address`}:{ok:!0,url:r.url,addresses:n}}function ot(t=process.env){let e=t.ORACLE_HOSTED_EGRESS_PROXY||"";if(!e)return null;let r;try{r=new URL(e)}catch{throw new Error("egress-guard: ORACLE_HOSTED_EGRESS_PROXY is not a URL")}if(r.protocol!=="http:"||!["127.0.0.1","::1","localhost","[::1]"].includes(r.hostname)||!r.port||r.username||r.password)throw new Error("egress-guard: egress proxy must be an exact loopback http origin");let n=t.ORACLE_HOSTED_EGRESS_TOKEN||"";if(!/^[A-Za-z0-9_-]{43}$/.test(n))throw new Error("egress-guard: egress proxy token is missing");return{uri:r.origin,token:n}}async function ae({requireUndici:t=!1,importUndici:e=()=>import("undici")}={}){let r,n,o;try{o=await e(),r=o.Agent,n=o.fetch}catch(l){if(t)throw new Error(`egress-guard: untrustedUrl pinning requires the undici package, which failed to load: ${l?.message||l}`);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 a=l=>String(l).toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,""),i=new Map,d=l=>(Array.isArray(l)?l:[l]).map(u=>typeof u=="string"?{address:u}:u).filter(u=>u&&u.address).map(u=>({address:u.address,family:u.family||(j.isIPv6(u.address)?6:4)})),c=(l,u,g)=>{i.set(a(l),d(typeof u=="string"?[{address:u,family:g}]:u))},h=l=>{let u=a(l);if(j.isIP(u))return[{address:u,family:j.isIPv6(u)?6:4}];let g=i.get(u);if(!g||!g.length)throw new Error(`refused: unpinned host ${l} during pinned fetch`);return g},s=ot(),p=s&&typeof o.ProxyAgent=="function"?new o.ProxyAgent({uri:s.uri,token:`Bearer ${s.token}`,connectTimeout:1e4}):new r({connect:{lookup(l,u,g){let m;try{m=h(l)}catch(O){return g(O)}return u?.all?g(null,m):g(null,m[0].address,m[0].family)}}}),E=st((l,u={})=>n(l,{...u,dispatcher:p}),c);return{dispatcher:p,fetch:E,pin:c,resolve:h,async close(){try{await p.destroy()}catch{}}}}var ie=Symbol.for("oracle.egressGuard.pinCapableFetch");function st(t,e){if(typeof t!="function")throw new Error("markPinCapableFetch: fetchImpl must be a function");if(typeof e!="function")throw new Error("markPinCapableFetch: pin must be a function");return t[ie]=Object.freeze({pin:e}),t}function ce(t){return typeof t=="function"&&typeof t[ie]?.pin=="function"}function Oe(t,e,r){if(!ce(t))throw new Error("pinFetchToAddresses: fetchImpl is not pin-capable");t[ie].pin(e,r)}var it=new Set([408,425,429,500,502,503,504]),Se=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),ct=2,Re=4e3,ut=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"aborted")?.get,lt=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"reason")?.get,ft=AbortSignal.prototype.throwIfAborted,dt=EventTarget.prototype.addEventListener,Pe=EventTarget.prototype.removeEventListener,xe=typeof AbortSignal.any=="function"?AbortSignal.any.bind(AbortSignal):null,W=t=>t?ut.call(t):!1,pt=t=>t?lt.call(t):void 0,ht=new Set([301,302,303,307,308]),ee=3,ar=64*1024,N=Object.freeze({depth:32,nodes:1e4,fields:1e4,arrayLength:1e4,bytes:1024*1024});function T(t){return L(`HTTP JSON body refused: ${t}`)}function mt(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 yt(t){let e=[],r=0,n=0,o=0,a=0,i=new WeakSet,d=s=>{if(r+=Buffer.byteLength(s,"utf8"),r>N.bytes)throw T("serialized byte limit exceeded");e.push(s)},c=s=>{if(Buffer.byteLength(s,"utf8")>N.bytes)throw T("serialized byte limit exceeded");return JSON.stringify(s)},h=(s,p)=>{if(n+=1,n>N.nodes)throw T("node limit exceeded");if(p>N.depth)throw T("depth limit exceeded");if(s===null){d("null");return}if(typeof s=="string"){d(c(s));return}if(typeof s=="boolean"){d(s?"true":"false");return}if(typeof s=="number"){if(!Number.isFinite(s))throw T("non-finite number");d(Object.is(s,-0)?"0":String(s));return}if(typeof s!="object")throw T("unsupported non-JSON value");if(k.isProxy(s))throw T("proxy value");if(mt(s))throw T("unsupported exotic object");if(i.has(s))throw T("cyclic value");i.add(s);try{if(Object.getOwnPropertySymbols(s).length>0)throw T("symbol-keyed fields are unsupported");if(Array.isArray(s)){let u=Object.getPrototypeOf(s),g=0;for(;u!==null;){if(k.isProxy(u))throw T("proxy array prototype");if(g+=1,g>N.depth)throw T("array prototype depth limit exceeded");u=Object.getPrototypeOf(u)}if(s.length>N.arrayLength)throw T("array length limit exceeded");for(let O=0;O<s.length;O+=1){let $=Object.getOwnPropertyDescriptor(s,String(O));if(!$||!Object.hasOwn($,"value")||$.enumerable!==!0)throw T("array entries must be dense enumerable own data")}let m=0;for(let O in s){if(a+=1,a>N.fields)throw T("enumeration limit exceeded");if(Object.hasOwn(s,O)&&(m+=1,m>s.length))throw T("named array fields are unsupported")}if(m!==s.length)throw T("array entries must be dense enumerable own data");d("[");for(let O=0;O<s.length;O+=1)O&&d(","),h(Object.getOwnPropertyDescriptor(s,String(O)).value,p+1);d("]");return}let E=Object.getPrototypeOf(s);if(E!==Object.prototype&&E!==null)throw T("non-plain object");let l=[];for(let u in s){if(a+=1,a>N.fields)throw T("enumeration limit exceeded");if(!Object.hasOwn(s,u))continue;if(o+=1,o>N.fields)throw T("field limit exceeded");let g=Object.getOwnPropertyDescriptor(s,u);if(!g||!Object.hasOwn(g,"value")||g.enumerable!==!0)throw T("object fields must be enumerable own data");l.push([u,g.value])}d("{");for(let u=0;u<l.length;u+=1)u&&d(","),d(c(l[u][0])),d(":"),h(l[u][1],p+1);d("}")}finally{i.delete(s)}};return h(t,0),e.join("")}function wt(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 o=n.toLowerCase();if(r.has(o))throw new TypeError("HTTP headers contain a duplicate canonical name");r.add(o);let a=Object.getOwnPropertyDescriptor(t,n);if(!a||!Object.hasOwn(a,"value"))throw new TypeError("HTTP headers must contain own data properties");let i=a.value;if(i==null||["object","function","symbol"].includes(typeof i))throw new TypeError("HTTP header values must be scalar");e[n]=String(i)}return e}function bt(){return Object.assign(Object.create(null),{Accept:"application/json"})}function gt(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 Et(t,e){return new URL(String(t)).origin===new URL(String(e)).origin}var ue=new Map,Ae=new WeakMap,ve=1;function Q(t){if((typeof t!="object"||t===null)&&typeof t!="function")return`${typeof t}:${String(t)}`;let e=Ae.get(t);return e||(e=ve,ve+=1,Ae.set(t,e)),`reference:${e}`}var Tt=new Set(["eth_blockNumber","eth_call","eth_chainId","eth_estimateGas","getHealth","minimumLedgerSlot","net_version","simulateTransaction","web3_clientVersion"]),Ot=new Set(["allMids","l2Book","outcomeMeta","spotClearinghouseState","userFills","meta","metaAndAssetCtxs","perpDexs","candleSnapshot","fundingHistory","openOrders","frontendOpenOrders","clearinghouseState","spotMeta","validatorSummaries","delegatorSummary","delegations","delegatorRewards","delegatorHistory","maxBuilderFee"]);function _e(t){if(!t||typeof t!="object"||Array.isArray(t)||!Object.hasOwn(t,"jsonrpc")||!Object.hasOwn(t,"method")||t.jsonrpc!=="2.0")return!1;let e=typeof t.method=="string"?t.method:"";return e?Tt.has(e)||/^get[A-Z0-9_]/u.test(e)||/^is[A-Z0-9_]/u.test(e)||/^eth_get[A-Z0-9_]/u.test(e):!1}function Ie(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(_e);if(!r||typeof r!="object")return!1;if(Object.hasOwn(r,"jsonrpc")||Object.hasOwn(r,"method"))return _e(r);let n=Object.hasOwn(r,"type")?r.type:null;return typeof n=="string"&&Ot.has(n)&&(!Object.hasOwn(r,"action")||r.action==null)&&(!Object.hasOwn(r,"signature")||r.signature==null)&&(!Object.hasOwn(r,"nonce")||r.nonce==null)}function St(t,e,r,n={},o=null){let a=at("sha256"),i=(c,h)=>{let s=String(h);a.update(String(Buffer.byteLength(c,"utf8"))).update(":").update(c),a.update("=").update(String(Buffer.byteLength(s,"utf8"))).update(":").update(s).update(`
2
+ `)};i("method",t),i("url",e),Object.keys(r||{}).map((c,h)=>({name:c.toLowerCase(),order:h,value:String(r[c])})).sort((c,h)=>c.name.localeCompare(h.name)||c.order-h.order).forEach((c,h)=>{i(`header-name-${h}`,c.name),i(`header-value-${h}`,c.value)}),i("body",o??"-");for(let c of["untrustedUrl","maxResponseBytes","sameOriginRedirectsOnly","redirectPolicy","maxRedirects","timeoutMs","retries","fetchImpl","realFetch","lookupFn","importUndici","validateResponse"])i(`context-${c}`,n[c]??"-");return a.digest("hex")}function Rt(t,e){let r=Number(e);return Number.isFinite(r)&&r>0?Math.min(r*1e3,Re):Math.min(250*2**t,Re)+Math.floor(Math.random()*100)}var Pt=t=>new Promise(e=>setTimeout(e,t));function L(t,e={}){let r=new Error(t);return r.retryable=!1,Object.assign(r,e),r}function le(t,e,r){return L(`HTTP response from ${t} exceeded maxResponseBytes ${r} (${e})`,{oversize:!0})}function B(t){try{let e=t?.body?.cancel?.();e&&typeof e.then=="function"&&e.catch(()=>{})}catch{}}function xt(t){return t?t.byteLength??t.length??0:0}async function At(t,e,{url:r,truncate:n=!1,onOversize:o}={}){if(e==null)return await t.text();let a=Number(t.headers?.get?.("content-length"));if(Number.isFinite(a)&&a>e&&(B(t),!n))throw le(r,`content-length ${a}`,e);let i=t.body?.getReader?.();if(!i){let p=await t.text(),E=Buffer.byteLength(p,"utf8");if(E>e){if(!n)throw le(r,`body ${E} bytes`,e);return Buffer.from(p,"utf8").subarray(0,e).toString("utf8")}return p}let d=[],c=0,h=!1;try{for(;;){let{value:p,done:E}=await i.read();if(E)break;if(p&&(d.push(Buffer.from(p)),c+=xt(p),c>e)){h=!0;break}}}finally{if(h)try{await i.cancel()}catch{}try{i.releaseLock?.()}catch{}}if(h&&(typeof o=="function"&&o(),!n))throw le(r,`streamed ${c} bytes`,e);let s=Buffer.concat(d);return(h?s.subarray(0,e):s).toString("utf8")}function vt(t){if(!t)return null;try{return JSON.parse(t)}catch{return null}}async function _t(t,{fetchImpl:e,method:r,headers:n,body:o,timeoutMs:a,lookupFn:i,realFetch:d,untrustedUrl:c=!1,maxResponseBytes:h=null,sameOriginRedirectsOnly:s=!1,importUndici:p,validateResponse:E,signal:l,redirectPolicy:u="follow",maxRedirects:g=ee}){let m=null,O=e,$=i?{lookupFn:i}:{};if(c&&!d&&!ce(O))throw L(`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 A=new AbortController,I=setTimeout(()=>A.abort(),a),G=l?xe?xe([l,A.signal]):l:A.signal,z=async(y,{status:R=null}={})=>{let P=await se(y,$);if(!P.ok)throw L(R==null?`HTTP refused ${y}: ${P.error}`:`HTTP redirect to ${y} ${P.error}`,R==null?{}:{status:R});let H=new URL(y).hostname;if(d){if(m&&(await m.close(),m=null),!m)try{m=await ae({requireUndici:!0,...p?{importUndici:p}:{}})}catch(f){throw L(R==null?`HTTP refused ${y}: ${f?.message||f}`:`HTTP redirect to ${y} refused: ${f?.message||f}`,R==null?{}:{status:R})}m.pin(H,P.addresses),O=m.fetch}else Oe(O,H,P.addresses);return P};try{let y=String(t),R=Object.assign(Object.create(null),n||{});c&&await z(y);for(let P=0;P<=g;P+=1){let H=Object.assign(Object.create(null),{method:r,headers:R,body:o,signal:G,redirect:"manual",dispatcher:void 0}),f=await O(y,H);if((u==="error"||g===0)&&f.status>=300&&f.status<400)throw B(f),L(`HTTP ${f.status} ${r} redirect refused`,{status:f.status,redirectRefused:!0});if(ht.has(f.status)){let v=s===!0&&r==="POST"&&[307,308].includes(f.status)&&Ie(r,o);if(r!=="GET"&&r!=="HEAD"&&!v){B(f);let S=new Error(`HTTP ${f.status} ${r} ${y} redirected non-idempotent request`);throw S.status=f.status,S}if(P===g)throw B(f),L(`HTTP ${f.status} ${r} redirect budget exhausted`,{status:f.status,redirectRefused:!0});let we=f.headers?.get?.("location"),_;try{_=gt(we,y)}catch(S){throw B(f),S}let M=!Et(_,y);if(B(f),M&&r==="POST"){let S=new Error(`HTTP ${f.status} ${r} cross-origin redirect refused`);throw S.status=f.status,S}if(M&&s){let S=new Error(`HTTP ${f.status} ${r} cross-origin redirect refused`);throw S.status=f.status,S.retryable=!1,S}if(M&&(R=bt(R)),c)await z(_,{status:f.status});else if(M){let S=await se(_,$);if(!S.ok){let b=new Error(`HTTP redirect from ${y} ${S.error}`);throw b.status=f.status,b.retryable=!1,b}d&&S.addresses?.length&&(m||(m=await ae(p?{importUndici:p}:{})),m&&(m.pin(new URL(_).hostname,S.addresses),O=m.fetch))}y=_;continue}if(typeof E=="function")try{await E(f,{url:y})}catch(v){throw B(f),L(v?.message||String(v))}let x=await At(f,h,{url:y,onOversize:()=>A.abort()}),V=vt(x);if(!f.ok){let v=new Error(`HTTP ${f.status} ${r} ${y}`);throw v.status=f.status,v.retryAfter=f.headers?.get?.("retry-after")??null,v.body=V??x.slice(0,300),v}return V??x}throw new Error(`HTTP redirect loop for ${t}`)}catch(y){if(A.signal.aborted&&!W(l)){let R=y&&(typeof y=="object"||typeof y=="function")&&!k.isProxy(y)?y:null,P=R?Object.getOwnPropertyDescriptor(R,"oversize"):null;if(!(P&&Object.hasOwn(P,"value")&&P.value===!0))try{if(!R)throw new TypeError("unsafe rejection");Object.defineProperties(R,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}})}catch{let f=new Error("HTTP request timed out");throw Object.defineProperties(f,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}}),f}}throw y}finally{clearTimeout(I),m&&await m.close()}}async function Ce(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 o=n("method");if(o!==void 0&&(typeof o!="string"||!/^[A-Za-z]+$/u.test(o)))throw new TypeError("HTTP method must be a string token");let a=n("timeoutMs");if(a!==void 0&&(!Number.isInteger(a)||a<1||a>12e4))throw new TypeError("HTTP timeoutMs must be a bounded integer");let i=n("retries");if(i!==void 0&&(!Number.isInteger(i)||i<0||i>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 c=n("maxRedirects");if(c!==void 0&&(!Number.isInteger(c)||c<0||c>ee))throw new TypeError(`HTTP maxRedirects must be an integer from 0 through ${ee}`);if(d==="error"&&c!==void 0&&c!==0)throw new TypeError('HTTP redirectPolicy "error" requires maxRedirects 0 when supplied');let h=d??"follow",s=h==="error"?0:c??ee;for(let b of["dedupe","untrustedUrl","sameOriginRedirectsOnly"]){let w=n(b);if(w!==void 0&&typeof w!="boolean")throw new TypeError(`HTTP ${b} must be boolean`)}let p=n("maxResponseBytes");if(p!==void 0&&(!Number.isInteger(p)||p<1||p>64*1024*1024))throw new TypeError("HTTP maxResponseBytes must be a bounded integer");let E=n("signal");if(E!==void 0){if(k.isProxy(E)||!(E instanceof AbortSignal))throw new TypeError("HTTP signal must be a native AbortSignal");try{W(E)}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 l=n("fetchImpl"),u=l||globalThis.fetch;if(typeof u!="function")throw new Error("fetch unavailable \u2014 pass opts.fetchImpl");let g=a??12e3,m=(o||"GET").toUpperCase(),O=n("headers"),$=wt(O),A=Object.assign(Object.create(null),$);Object.keys(A).some(b=>b.toLowerCase()==="accept")||(A.Accept="application/json");let I=n("body");I!=null&&typeof I!="string"&&(Object.keys(A).find(w=>w.toLowerCase()==="content-type")||(A["Content-Type"]="application/json"),I=yt(I));let G=i??ct,z=n("lookupFn"),y=!l,R=n("untrustedUrl")===!0,P=n("sameOriginRedirectsOnly")===!0,H=n("importUndici"),f=n("validateResponse"),x=E,V=p??null,v=async()=>{let b;for(let w=0;w<=G;w++){x&&ft.call(x);let be=q("http");try{let C=await _t(t,{fetchImpl:u,method:m,headers:A,body:I,timeoutMs:g,lookupFn:z,realFetch:y,untrustedUrl:R,maxResponseBytes:V,sameOriginRedirectsOnly:P,importUndici:H,validateResponse:f,signal:x,redirectPolicy:h,maxRedirects:s});return be?.("succeeded"),C}catch(C){b=C;let F=re=>{if(!C||typeof C!="object"&&typeof C!="function"||k.isProxy(C))return;let J=Object.getOwnPropertyDescriptor(C,re);return J&&Object.hasOwn(J,"value")?J.value:void 0},K=F("status");be?.("failed",K);let Ye=F("oracleTimeout")===!0||F("name")==="AbortError"||F("name")==="TimeoutError"||W(x),We=new Set([408,425,429]),Xe=F("retryable")===!1?!1:K!=null?We.has(K)||it.has(K)&&Se.has(m):!Ye&&Se.has(m);if(w===G||!Xe)throw C;let ge=Rt(w,F("retryAfter")),Ke=q("retry"),Ee=!1;try{x?await new Promise((re,J)=>{let Te,Y=()=>{clearTimeout(Te),Pe.call(x,"abort",Y),J(pt(x)||new DOMException("Aborted","AbortError"))};if(W(x)){Y();return}Te=setTimeout(()=>{Pe.call(x,"abort",Y),re()},ge),dt.call(x,"abort",Y,{once:!0}),W(x)&&Y()}):await Pt(ge),Ee=!0}finally{Ke?.(Ee?"succeeded":"failed")}}}throw b};if(!(n("dedupe")!==!1&&!x&&Ie(m,I)))return v();let _=St(m,t,A,{untrustedUrl:R,maxResponseBytes:V,sameOriginRedirectsOnly:P,redirectPolicy:h,maxRedirects:s,timeoutMs:g,retries:G,fetchImpl:Q(u),realFetch:y,lookupFn:Q(z),importUndici:Q(H),validateResponse:Q(f)},I),M=ue.get(_);if(M){let b=q("shared");try{let w=await M;return b?.("succeeded"),w}catch(w){throw b?.("failed"),w}}let S=v().finally(()=>ue.delete(_));return ue.set(_,S),S}var fe={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},elysium:{chainId:1339,name:"Elysium",rpcEnv:["ELYSIUM_RPC_URL"],evm:!0,readOnly:!0}};var It=new Map(Object.values(fe).map(t=>[t.chainId,t]));function Ne(t){return It.get(Number(t))||null}function ke(t,e=process.env){let r=Ne(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 Ct,getAddress as mr}from"ethers";var yr=new Ct(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);var Nt={1:"https://ethereum.publicnode.com",137:"https://polygon-bor-rpc.publicnode.com",42161:"https://arbitrum-one-rpc.publicnode.com",8453:"https://base-rpc.publicnode.com",10:"https://optimism-rpc.publicnode.com",988:"https://rpc.stable.xyz",56:"https://bsc-rpc.publicnode.com",43114:"https://avalanche-c-chain-rpc.publicnode.com",999:"https://rpc.hyperliquid.xyz/evm",2741:"https://api.mainnet.abs.xyz",4663:"https://rpc.mainnet.chain.robinhood.com",1339:"https://rpc.elysiumchain.tech"};function kt(t,{rpcUrl:e,env:r=process.env}={}){if(e)return e;let n=ke(t,r);return n||Nt[Number(t)]||null}var $t=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/;function Ht(t){let e=String(t||""),r=e.toLowerCase();if(e!==e.trim()||!/^[a-zA-Z0-9_]+$/.test(e)||!$t.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 X=new Map,$e=new Map;function Lt(t){let e=new Error(t?.message||JSON.stringify(t));return e.code=t?.code,e}function Mt(t){if(t?.error)throw Lt(t.error);return t?.result}function jt(t,e,r){return`${t}
3
3
  ${e}
4
- ${JSON.stringify(r??[])}`}async function Bt(t,e,r){return ke(t,{method:"POST",body:e,fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3,signal:r.signal})}async function $e(t,e,r=[],n={}){let o=String(e||""),a=$t(o),i=Nt(t,n);if(!i)throw new Error(`No RPC URL for chainId ${t} (set env from chain registry rpcEnv or pass rpcUrl)`);if(a==="eth_chainid"&&n.cacheChainId!==!1){let s=He.get(i);if(s!=null)return s}let c=n.dedupe!==!1&&!n.signal?Mt(i,o,r):null;if(c&&X.has(c))return X.get(c);let h=(async()=>{let s=await Bt(i,{jsonrpc:"2.0",id:1,method:e,params:r},n),p=Lt(s);return a==="eth_chainid"&&typeof p=="string"&&He.set(i,p),p})();return c&&(X.set(c,h),h.finally(()=>{X.get(c)===h&&X.delete(c)}).catch(()=>{})),h}var he=999,pe=1,Ut=8453,je="0x1d9d87eBc14e71490bB87f1C39F65BDB979f3cb7",Dt="0x4d5e4ed4D5e4A160Fa136853597cDc2eBBe66494",Le="0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",Ft="0xC6d566A56A1aFf6508b41f6c90ff131615583BCD",Gt=".80002105.reverse",me=/^0x[a-fA-F0-9]{40}$/,Me=new TextEncoder,Be=t=>"0x"+Buffer.from(t).toString("hex"),U=t=>Be(de(Me.encode(t))).slice(0,10),Ue=t=>t.toLowerCase().replace(/^0x/,"").padStart(64,"0");function te(t){let e=new Uint8Array(32);if(t)for(let r of String(t).split(".").reverse()){let n=de(Me.encode(r)),o=new Uint8Array(64);o.set(e,0),o.set(n,32),e=de(o)}return Be(e)}function ye(t){if(!t||t==="0x"||/^0x0*$/.test(t))return"";try{let e=t.slice(2),r=parseInt(e.slice(0,64),16)*2,n=parseInt(e.slice(r,r+64),16);if(!Number.isFinite(n)||n<=0)return"";let o=e.slice(r+64,r+64+n*2);return Buffer.from(o,"hex").toString("utf8")}catch{return""}}async function D(t,e,r){try{return await $e(t,"eth_call",[{to:e,data:r},"latest"])}catch{return null}}async function zt(t){let e=await D(he,je,U("primaryName(address)")+Ue(t)),r=ye(e);return r?r.endsWith(".hl")?r:`${r}.hl`:null}async function Vt(t){let e=await D(he,Dt,U("getName(address)")+Ue(t)),r=ye(e);return r?r.endsWith(".hype")?r:`${r}.hype`:null}async function De(t,e,r){let n=await D(t,r,U("name(bytes32)")+e.slice(2));return ye(n)||null}async function Jt(t){let e=te(`${t.slice(2).toLowerCase()}.addr.reverse`),r=await D(pe,Le,U("resolver(bytes32)")+e.slice(2));if(!r)return null;let n="0x"+r.slice(-40);return/^0x0+$/.test(n)?null:De(pe,e,n)}async function Yt(t){let e=te(t.slice(2).toLowerCase()+Gt);return De(Ut,e,Ft)}var Fe=[{source:"hl",fn:zt},{source:"hype",fn:Vt},{source:"ens",fn:Jt},{source:"basename",fn:Yt}];async function Ge(t){if(!me.test(String(t||"").trim()))return null;let e=String(t).trim();return(await Promise.all(Fe.map(async({source:n,fn:o})=>{try{let a=await o(e);return a?{name:a,source:n,address:e}:null}catch{return null}}))).find(Boolean)||null}async function Wt(t){let e=te(t),r=await D(he,je,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 Xt(t,e,r){let n=te(e),o=await D(t,r,U("resolver(bytes32)")+n.slice(2));if(!o)return null;let a="0x"+o.slice(-40);if(/^0x0+$/.test(a))return null;let i=await D(t,a,U("addr(bytes32)")+n.slice(2));if(!i)return null;let d="0x"+i.slice(-40);return/^0x0+$/.test(d)?null:d}async function ze(t){let e=String(t||"").trim().toLowerCase();if(!e||!e.includes("."))return null;if(e.endsWith(".hl")){let r=await Wt(e);return r?{address:r,source:"hl",name:e}:null}if(e.endsWith(".eth")){let r=await Xt(pe,e,Le);return r?{address:r,source:e.endsWith(".base.eth")?"basename":"ens",name:e}:null}return null}var Ve=Fe.map(t=>t.source);var Je=`oracle resolve <name-or-address> [--json]
4
+ ${JSON.stringify(r??[])}`}async function Bt(t,e,r){return Ce(t,{method:"POST",body:e,fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3,signal:r.signal})}async function He(t,e,r=[],n={}){let o=String(e||""),a=Ht(o),i=kt(t,n);if(!i)throw new Error(`No RPC URL for chainId ${t} (set env from chain registry rpcEnv or pass rpcUrl)`);if(a==="eth_chainid"&&n.cacheChainId!==!1){let s=$e.get(i);if(s!=null)return s}let c=n.dedupe!==!1&&!n.signal?jt(i,o,r):null;if(c&&X.has(c))return X.get(c);let h=(async()=>{let s=await Bt(i,{jsonrpc:"2.0",id:1,method:e,params:r},n),p=Mt(s);return a==="eth_chainid"&&typeof p=="string"&&$e.set(i,p),p})();return c&&(X.set(c,h),h.finally(()=>{X.get(c)===h&&X.delete(c)}).catch(()=>{})),h}var he=999,pe=1,Ut=8453,Le="0x1d9d87eBc14e71490bB87f1C39F65BDB979f3cb7",Dt="0x4d5e4ed4D5e4A160Fa136853597cDc2eBBe66494",Me="0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e",Ft="0xC6d566A56A1aFf6508b41f6c90ff131615583BCD",Gt=".80002105.reverse",me=/^0x[a-fA-F0-9]{40}$/,je=new TextEncoder,Be=t=>"0x"+Buffer.from(t).toString("hex"),U=t=>Be(de(je.encode(t))).slice(0,10),Ue=t=>t.toLowerCase().replace(/^0x/,"").padStart(64,"0");function te(t){let e=new Uint8Array(32);if(t)for(let r of String(t).split(".").reverse()){let n=de(je.encode(r)),o=new Uint8Array(64);o.set(e,0),o.set(n,32),e=de(o)}return Be(e)}function ye(t){if(!t||t==="0x"||/^0x0*$/.test(t))return"";try{let e=t.slice(2),r=parseInt(e.slice(0,64),16)*2,n=parseInt(e.slice(r,r+64),16);if(!Number.isFinite(n)||n<=0)return"";let o=e.slice(r+64,r+64+n*2);return Buffer.from(o,"hex").toString("utf8")}catch{return""}}async function D(t,e,r){try{return await He(t,"eth_call",[{to:e,data:r},"latest"])}catch{return null}}async function zt(t){let e=await D(he,Le,U("primaryName(address)")+Ue(t)),r=ye(e);return r?r.endsWith(".hl")?r:`${r}.hl`:null}async function Vt(t){let e=await D(he,Dt,U("getName(address)")+Ue(t)),r=ye(e);return r?r.endsWith(".hype")?r:`${r}.hype`:null}async function De(t,e,r){let n=await D(t,r,U("name(bytes32)")+e.slice(2));return ye(n)||null}async function Jt(t){let e=te(`${t.slice(2).toLowerCase()}.addr.reverse`),r=await D(pe,Me,U("resolver(bytes32)")+e.slice(2));if(!r)return null;let n="0x"+r.slice(-40);return/^0x0+$/.test(n)?null:De(pe,e,n)}async function Yt(t){let e=te(t.slice(2).toLowerCase()+Gt);return De(Ut,e,Ft)}var Fe=[{source:"hl",fn:zt},{source:"hype",fn:Vt},{source:"ens",fn:Jt},{source:"basename",fn:Yt}];async function Ge(t){if(!me.test(String(t||"").trim()))return null;let e=String(t).trim();return(await Promise.all(Fe.map(async({source:n,fn:o})=>{try{let a=await o(e);return a?{name:a,source:n,address:e}:null}catch{return null}}))).find(Boolean)||null}async function Wt(t){let e=te(t),r=await D(he,Le,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 Xt(t,e,r){let n=te(e),o=await D(t,r,U("resolver(bytes32)")+n.slice(2));if(!o)return null;let a="0x"+o.slice(-40);if(/^0x0+$/.test(a))return null;let i=await D(t,a,U("addr(bytes32)")+n.slice(2));if(!i)return null;let d="0x"+i.slice(-40);return/^0x0+$/.test(d)?null:d}async function ze(t){let e=String(t||"").trim().toLowerCase();if(!e||!e.includes("."))return null;if(e.endsWith(".hl")){let r=await Wt(e);return r?{address:r,source:"hl",name:e}:null}if(e.endsWith(".eth")){let r=await Xt(pe,e,Me);return r?{address:r,source:e.endsWith(".base.eth")?"basename":"ens",name:e}:null}return null}var Ve=Fe.map(t=>t.source);var Je=`oracle resolve <name-or-address> [--json]
5
5
 
6
6
  oracle resolve demi.hl
7
7
  oracle resolve vitalik.eth
@@ -22,4 +22,4 @@ Sources, in priority order: ${Ve.join(", ")}.`;async function Kt(t=[]){let e=t.f
22
22
  `),0):(process.stdout.write(`${n}
23
23
  unresolved (no owner record)
24
24
  `),0)}catch(o){return process.stderr.write(`resolve failed: ${o?.message||o}
25
- `),1}}var Sr={name:"resolve",summary:"resolve .hl/.hype/.eth names to addresses and back",usage:Je,async run(t){return Kt(t.argv||[])}};export{Sr as default};
25
+ `),1}}var Or={name:"resolve",summary:"resolve .hl/.hype/.eth names to addresses and back",usage:Je,async run(t){return Kt(t.argv||[])}};export{Or as default};
@@ -1,4 +1,4 @@
1
- import{homedir as g}from"node:os";import{join as E}from"node:path";var C=process.env.ORACLE_PUBLIC_DESKTOP==="1",J=C?process.env.ORACLE_CONFIG_DIR||E(g(),".config","oracle"):E(g(),".config","oracle"),Ee=C?J:E(g(),".config","mad-desk");var w={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}};var ve=new Map(Object.values(w).map(e=>[e.chainId,e]));function Z(e,t="value"){if(typeof e=="number"){if(!Number.isFinite(e))throw new Error(`${t} must be a finite number`);if(Math.abs(e)>Number.MAX_SAFE_INTEGER)throw new Error(`${t} exceeds safe integer precision \u2014 pass it as a decimal string or BigInt so the exact value is preserved`);if(Number.isInteger(e)&&!Number.isSafeInteger(e))throw new Error(`${t} exceeds safe integer precision \u2014 pass it as a decimal string or BigInt so the exact value is preserved`);return String(e)}if(typeof e=="string"){if(e!==e.trim())throw new Error(`${t} must be a number or decimal string`);return e}throw new Error(`${t} must be a number or decimal string`)}function b(e,t="amount"){if(typeof e=="bigint")return e;if(typeof e=="number"){if(!Number.isInteger(e))throw new Error(`${t} must be an integer`);if(!Number.isSafeInteger(e))throw new Error(`${t} exceeds safe integer precision \u2014 pass it as a decimal string or BigInt so the exact value is preserved`);return BigInt(e)}let n=Z(e,t);if(n==="")throw new Error(`${t} is required`);if(!/^-?\d+$/.test(n)&&!/^0x[0-9a-fA-F]+$/.test(n))throw new Error(`${t} must be an integer in decimal or 0x-hex form, got ${JSON.stringify(n)}`);try{return BigInt(n)}catch{throw new Error(`${t} must be an integer, got ${JSON.stringify(n)}`)}}var N=Object.freeze({SAFE:"safe",KERNEL_ZERODEV:"kernel-zerodev",BICONOMY_NEXUS:"biconomy-nexus",PERMISSIONLESS_VIEM:"permissionless-viem"}),Re=Object.freeze(Object.values(N)),Pe=Object.freeze({ACTIVE:"active",EXPIRED:"expired",REVOKED:"revoked"}),Le=1440*60*1e3;var R=["0x000000000022d473030f116ddee9f6b43ac78ba3"],P={4663:["0xcaf681a66d020601342297493863e78c959e5cb2","0x33e885ed0ec9bf04ecfb19341582aadcb4c8a9e7","0x1f7d7550b1b028f7571e69a784071f0205fd2efa","0x0bd7d308f8e1639fab988df18a8011f41eacad73","0x5fc5360d0400a0fd4f2af552add042d716f1d168","0xb477751b76cf82d00a686a1232f5fcd772414af3","0xff5cb29241f002ffed2eaa224e3e996d24a6e8d1"],8453:["0x2626664c2603336e57b271c5c0b26f421741e481","0x6ff5693b99212da76ad316178a184ab56d299b43","0x3d4e44eb1374240ce5f1b871ab261cd16335b76a","0x33128a8fc17869897dce68ed026d694621f6fdfd","0x4200000000000000000000000000000000000006","0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","0xbe6d8f0d05cc4be24d5167a3ef062215be6d18a5","0x254cf9e1e6e233aa1ac962cb9b05b2cfeaae15b0","0x5e7bb104d84c7cb9b682aac2f3d509f5f406809a","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x888888888889758f76e7103c6cbf23abbf58f946","0x3f170631ed9821ca51a59d996ab095162438dc10","0x4f37a9d177470499a2dd084621020b023fcffc1f","0xc92e8bdf79f0507f65a392b0ab4667716bfe0110"],42161:["0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45","0x61ffe014ba17989e743c5f6cb21bf9697530b21e","0x82af49447d8a07e3bd95bd0d56f35241523fbab1","0xaf88d065e77c8cc2239327c5edb3a432268e5831","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9","0x888888888889758f76e7103c6cbf23abbf58f946","0xeaedc32a51c510d35ebc11088fd5ff2b47aacf2e","0x2191718cd32d02b8e60badffea33e4b5dd9a0a0d","0xc92e8bdf79f0507f65a392b0ab4667716bfe0110","0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41","0x7452c558d45f8afc8c83dae62c3f8a5be19c71f6"],1:["0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x4cd00e387622c35bddb9b4c962c136462338bc31","0x6a000f20005980200259b80c5102003040001068","0xae563e3f8219521950555f5962419c8919758ea2","0x45312ea0eff7e09c83cbe249fa1d7598c4c8cd4e","0xc92e8bdf79f0507f65a392b0ab4667716bfe0110"],137:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x0dcded3545d565ba3b19e683431381007245d983"],10:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xe2fa4e1d17725e72dcdafe943ecf45df4b9e285b","0x0dcded3545d565ba3b19e683431381007245d983"],56:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xa72c85c258a81761433b4e8da60505fe3dd551cc"],43114:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xf39ca6ede9bf7820a952b52f3c94af526bab9015","0x0dcded3545d565ba3b19e683431381007245d983","0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2","0x820f5ffc5b525cd4d88cd91acf2c28f16530cc68"],999:["0x0a0758d937d1059c356d4714e57f5df0239bce1a","0xd2002373543ce3527023c75e7518c274a51ce712"],2741:["0x4f8c9056bb8a3616693a76922fa35d53c056e5b3"],988:["0x026f252016a7c47cdef1f05a3fc9e20c92a49c37","0xff5cb29241f002ffed2eaa224e3e996d24a6e8d1","0x817997ca8394e26cce3de3a076a4889b27dbf9de","0x3dea4be5615974f31624404ef288ba3b36dfeb83","0xeaf7ac0fdf150cdd89340fb762d83848de6a7b83","0x779ded0c9e1022225f8e0630b35a9b54be713736","0xbc6f7725f08232c151b528bdfcaaf89993ca86ee"]},L={1:["0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x4cd00e387622c35bddb9b4c962c136462338bc31","0x6a000f20005980200259b80c5102003040001068","0xae563e3f8219521950555f5962419c8919758ea2","0x45312ea0eff7e09c83cbe249fa1d7598c4c8cd4e"],10:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xe2fa4e1d17725e72dcdafe943ecf45df4b9e285b","0x0dcded3545d565ba3b19e683431381007245d983"],56:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xa72c85c258a81761433b4e8da60505fe3dd551cc"],137:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x0dcded3545d565ba3b19e683431381007245d983"],988:["0x026f252016a7c47cdef1f05a3fc9e20c92a49c37","0xff5cb29241f002ffed2eaa224e3e996d24a6e8d1","0x3dea4be5615974f31624404ef288ba3b36dfeb83","0xbc6f7725f08232c151b528bdfcaaf89993ca86ee"],999:["0x0a0758d937d1059c356d4714e57f5df0239bce1a","0xd2002373543ce3527023c75e7518c274a51ce712"],2741:["0x4f8c9056bb8a3616693a76922fa35d53c056e5b3"],4663:["0xcaf681a66d020601342297493863e78c959e5cb2","0xb477751b76cf82d00a686a1232f5fcd772414af3","0xff5cb29241f002ffed2eaa224e3e996d24a6e8d1"],8453:["0x2626664c2603336e57b271c5c0b26f421741e481","0x6ff5693b99212da76ad316178a184ab56d299b43","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x888888888889758f76e7103c6cbf23abbf58f946","0x3f170631ed9821ca51a59d996ab095162438dc10","0x4f37a9d177470499a2dd084621020b023fcffc1f"],42161:["0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x888888888889758f76e7103c6cbf23abbf58f946","0xeaedc32a51c510d35ebc11088fd5ff2b47aacf2e","0x2191718cd32d02b8e60badffea33e4b5dd9a0a0d"],43114:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xf39ca6ede9bf7820a952b52f3c94af526bab9015","0x0dcded3545d565ba3b19e683431381007245d983"]};import{encodeFunctionData as U}from"viem";import{keccak256 as S,concat as y,getContractAddress as Q,encodeAbiParameters as ee}from"viem";import{readFileSync as te}from"node:fs";import{dirname as ne,join as re}from"node:path";import{fileURLToPath as se}from"node:url";var v="0x4e59b44847b379578588920ca78fbf26c0b4956c";var D="0x365dc643926d7084c9e2f1ad68eb1a944b3aac8abe83c933aaf40c014579414f",I="0x6b557254c043c66fb0309ab9b8886340b5ce447295621ccd1b23862388bede7f",M="0xb7df21935c0b1ffe7da73781087bedfc0df078c47ff9d7187a8d866fd9f0e57a",ae=Object.freeze({1:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Ethereum Pectra (2025-05-07) activated EIP-7702. https://ethereum.org/roadmap/pectra/7702/"}),10:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Live RPC mainnet.optimism.io 2026-08-25: eth_estimateGas type=0x4 \u2192 'EIP-7702 authorization list has invalid fields' (type-4 parsed)."}),56:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Live RPC bsc-dataseed.binance.org 2026-08-25: type=0x4 \u2192 'EIP-7702 transaction with empty auth list'."}),137:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Coinbase Developer Docs: EIP-7702 sponsored delegations on Polygon mainnet. https://docs.cdp.coinbase.com/wallets/using-wallets/eip-7702"}),988:Object.freeze({status:"ready",path:"session-vault",evidence:"No EIP-7702 (type-4 == type-2 21000). Nick factory present. Vault stack."}),999:Object.freeze({status:"ready",path:"session-vault",evidence:"Live RPC: EIP-7702 authorization list not supported. Nick factory present. Vault stack."}),2741:Object.freeze({status:"ready",path:"session-vault",evidence:"No 7702-specific RPC behavior; zkSync-family AA. Vault is the portable EVM lock."}),4663:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Live RPC rpc.mainnet.chain.robinhood.com 2026-08-25: type-4 empty-auth \u2192 EIP-7702 empty auth list. Nick factory present."}),8453:Object.freeze({status:"draft",path:"eip7702-delegate",evidence:"Foundry 9/9 Prague + committed deployedBytecodeHash. No on-chain module address yet."}),42161:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Coinbase Developer Docs: EIP-7702 sponsored delegations on Arbitrum. https://docs.cdp.coinbase.com/wallets/using-wallets/eip-7702"}),43114:Object.freeze({status:"ready",path:"session-vault",evidence:"No 7702 activation (type-4 ignored as 21000). Nick factory present. Vault stack."})});function x(e){return ae[Number(e)]||null}function T(e){return x(e)?.path==="eip7702-delegate"}function z(e){return x(e)?.path==="session-vault"}function $(e){return T(e)||z(e)}var oe=/^0x[0-9a-fA-F]{40}$/;function l(e){let t=String(e||"").trim().toLowerCase();if(!oe.test(t)||/^0x0{40}$/.test(t))throw new Error("session-chain-plan: owner must be a 20-byte address");return S(y([D,t]))}function A(e){return Q({opcode:"CREATE2",from:v,salt:l(e),bytecodeHash:_(e)}).toLowerCase()}var m;function ie(){if(m)return m;let e=re(ne(se(import.meta.url)),"../../contracts/session-delegate/vault-creation.hex"),t=te(e,"utf8").trim().toLowerCase();if(!t.startsWith("0x")||t.length<10)throw new Error("session-chain-plan: vault creation bytecode missing");if(S(t)!==I)throw new Error("session-chain-plan: vault creation bytecode does not match VAULT_CREATION_CODE_HASH");return m=t,m}function V(e){let t=l(e);return y([t,k(e)])}function k(e){return l(e),y([ie(),ee([{type:"address"}],[String(e).trim().toLowerCase()])])}function _(e){return S(k(e))}var ce=/^0x[0-9a-fA-F]{40}$/;var W=!0;var Qe=Object.freeze({});function h(e){let t=Number(e);if(!$(t)){let r=x(t)?.evidence||"no session path";throw new Error(`pinned-session-module: chain ${t} refused \u2014 ${r}`)}return t}function de(e,t){let n=h(e),r=l(t),s=A(t),a=V(t);return Object.freeze({ok:!0,exec:!1,requiresUserSignature:!0,signingReady:!1,userCanSign:!0,broadcastReady:!1,executionReady:!1,chainId:n,stack:"session-vault",from:String(t).trim().toLowerCase(),to:v,value:"0",data:a,salt:r,saltScheme:"keccak256(oracle.session.vault.v1 || owner)",creationCodeHash:I,initCodeHash:_(t),predictedModule:s,bytecodeHash:M,initialize:Object.freeze({status:"blocked",reason:"recovery address not bound \u2014 name a cold key that is not the owner"}),note:"Unsigned CREATE2. Oracle will not broadcast. Fuse still off."})}var fe=(1n<<128n)-1n,ue=720*60*60*1e3;function le({capWei:e,expiresAtMs:t,nowMs:n=Date.now()}={}){let r=b(e??"0","capWei");if(r<=0n||r===fe)throw new Error("pinned-session-module: cap cannot be zero or limitless");let s=Number(t),a=Number(n);if(!Number.isFinite(s)||!Number.isFinite(a)||s<=a)throw new Error("pinned-session-module: expiry must be in the future");if(s-a>ue)throw new Error("pinned-session-module: expiry cannot exceed 30 days");return Object.freeze({ok:!0,capWei:r.toString(),expiresAtMs:s})}var pe=[{type:"function",name:"initialize",stateMutability:"nonpayable",inputs:[{name:"sessionOwner",type:"address"},{name:"sessionAgent",type:"address"},{name:"sessionRecovery",type:"address"},{name:"sessionGuardian",type:"address"},{name:"sessionExpiry",type:"uint48"},{name:"sessionCapWei",type:"uint128"},{name:"sessionDelay",type:"uint48"},{name:"targets",type:"address[]"}],outputs:[]}];function O(e,t){return e==null||String(e).trim()===""?null:c(e,t)}function H(e={}){let t=h(e.chainId),n=O(e.owner,"owner"),r=O(e.recovery,"recovery"),s=O(e.agent,"agent");if(!n)throw new Error("pinned-session-module: owner is required (the user's wallet)");if(!r)throw new Error("pinned-session-module: recovery is required (the user's spare key, never a house default)");if(n===r)throw new Error("pinned-session-module: recovery cannot be the owner");if(s&&(s===n||s===r))throw new Error("pinned-session-module: agent cannot be owner or recovery");let a=e.delaySeconds==null?3600:Number(e.delaySeconds);if(!Number.isFinite(a)||a<3600||a>720*3600)throw new Error("pinned-session-module: delay must be 1 hour\u201330 days");let i=de(t,n),p=e.guardian?c(e.guardian,"guardian"):null,d=[];Array.isArray(e.targets)&&e.targets.length&&(d=e.targets.map(K=>j(K,{chainId:t,banned:[n,r,s,p]})));let f={ok:!0,optional:!0,defaultOn:!1,exec:!1,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,executionReady:!1,chainId:t,owner:n,recovery:r,agent:s||null,guardian:p,predictedModule:i.predictedModule,deploy:i};if(!s||e.capWei==null||e.expiresAtMs==null)return Object.freeze({...f,initialize:Object.freeze({status:"blocked",reason:"agent, cap, and expiry are required \u2014 no house defaults",targets:d}),note:"Optional. Unsigned. User signs. Fuse off."});if(le({capWei:e.capWei,expiresAtMs:e.expiresAtMs,nowMs:e.nowMs}),d.length===0)throw new Error("pinned-session-module: native pay targets required \u2014 no router default");let u=Math.floor(Number(e.expiresAtMs)/1e3),X=U({abi:pe,functionName:"initialize",args:[n,s,r,f.guardian||"0x0000000000000000000000000000000000000000",u,BigInt(e.capWei),a,d]});return Object.freeze({...f,initialize:Object.freeze({status:"ready",exec:!1,requiresUserSignature:!0,userCanSign:!0,to:i.predictedModule,data:X,value:"0",targets:d,capWei:String(e.capWei),expiresAtMs:Number(e.expiresAtMs),delaySeconds:a}),userCanSign:!0,note:"Optional. Unsigned deploy + initialize. User wallet signs. Oracle does not broadcast. Fuse off."})}function c(e,t){let n=String(e||"").trim().toLowerCase();if(!ce.test(n))throw new Error(`pinned-session-module: ${t} must be a 20-byte address`);return n}function j(e,{chainId:t,banned:n=[]}={}){let r=c(e,"target");if(r==="0x0000000000000000000000000000000000000000"||n.map(i=>String(i||"").toLowerCase()).includes(r))throw new Error("pinned-session-module: target cannot be owner, recovery, agent, guardian, or zero");if(new Set([...L[Number(t)]||[],...P[Number(t)]||[],...R].map(i=>String(i).toLowerCase())).has(r))throw new Error("pinned-session-module: swap routers are not native-pay targets");return r}var be=[{type:"function",name:"execute",stateMutability:"payable",inputs:[{name:"target",type:"address"},{name:"value",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]}];function F(e,t){return`${Number(e)}:${c(t,"owner")}`}function B(e={}){if(!W)throw new Error("pinned-session-module: optional vault spend is off");let t=h(e.chainId),n=c(e.owner,"owner"),r=c(e.recovery,"recovery"),s=c(e.agent,"agent");if(n===r)throw new Error("pinned-session-module: recovery cannot be the owner");if(s===n||s===r)throw new Error("pinned-session-module: agent cannot be owner or recovery");let a=(e.targets||[]).map(u=>c(u,"target"));if(!a.length)throw new Error("pinned-session-module: native pay targets required \u2014 no router default");let i=e.guardian?c(e.guardian,"guardian"):null;for(let u of a)j(u,{chainId:t,banned:[n,r,s,i]});let p=A(n),d=Object.freeze({optIn:!0,chainId:t,owner:n,recovery:r,agent:s,vault:p,targets:Object.freeze([...a])}),f=e.store;return f&&typeof f.set=="function"&&f.set(F(t,n),d),d}function me(e={}){let t=e.store;if(!t||typeof t.get!="function")return null;let n=h(e.chainId),r=c(e.owner,"owner");return t.get(F(n,r))||null}function G(e={}){if(!W)throw new Error("pinned-session-module: optional vault spend is off");let t=me(e);if(!t)throw new Error("pinned-session-module: not opted in");let n=c(e.target,"target");if(!t.targets.includes(n))throw new Error("pinned-session-module: target not permitted");let r=b(e.valueWei??"0","valueWei");if(r<0n)throw new Error("pinned-session-module: valueWei must not be negative");let s=U({abi:be,functionName:"execute",args:[n,r,"0x"]});return Object.freeze({ok:!0,optIn:!0,exec:!1,requiresUserSignature:!0,userCanSign:!0,signingReady:!1,broadcastReady:!1,executionReady:!1,chainId:t.chainId,from:t.agent,to:t.vault,value:"0",data:s,target:n,valueWei:r.toString(),note:"Unsigned vault.execute. Agent key signs. Oracle does not broadcast."})}var xe=`oracle session-vault \u2014 optional per-user vault (unsigned)
1
+ import{homedir as g}from"node:os";import{join as E}from"node:path";var C=process.env.ORACLE_PUBLIC_DESKTOP==="1",J=C?process.env.ORACLE_CONFIG_DIR||E(g(),".config","oracle"):E(g(),".config","oracle"),Ee=C?J:E(g(),".config","mad-desk");var w={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},elysium:{chainId:1339,name:"Elysium",rpcEnv:["ELYSIUM_RPC_URL"],evm:!0,readOnly:!0}};var ve=new Map(Object.values(w).map(e=>[e.chainId,e]));function Z(e,t="value"){if(typeof e=="number"){if(!Number.isFinite(e))throw new Error(`${t} must be a finite number`);if(Math.abs(e)>Number.MAX_SAFE_INTEGER)throw new Error(`${t} exceeds safe integer precision \u2014 pass it as a decimal string or BigInt so the exact value is preserved`);if(Number.isInteger(e)&&!Number.isSafeInteger(e))throw new Error(`${t} exceeds safe integer precision \u2014 pass it as a decimal string or BigInt so the exact value is preserved`);return String(e)}if(typeof e=="string"){if(e!==e.trim())throw new Error(`${t} must be a number or decimal string`);return e}throw new Error(`${t} must be a number or decimal string`)}function b(e,t="amount"){if(typeof e=="bigint")return e;if(typeof e=="number"){if(!Number.isInteger(e))throw new Error(`${t} must be an integer`);if(!Number.isSafeInteger(e))throw new Error(`${t} exceeds safe integer precision \u2014 pass it as a decimal string or BigInt so the exact value is preserved`);return BigInt(e)}let n=Z(e,t);if(n==="")throw new Error(`${t} is required`);if(!/^-?\d+$/.test(n)&&!/^0x[0-9a-fA-F]+$/.test(n))throw new Error(`${t} must be an integer in decimal or 0x-hex form, got ${JSON.stringify(n)}`);try{return BigInt(n)}catch{throw new Error(`${t} must be an integer, got ${JSON.stringify(n)}`)}}var N=Object.freeze({SAFE:"safe",KERNEL_ZERODEV:"kernel-zerodev",BICONOMY_NEXUS:"biconomy-nexus",PERMISSIONLESS_VIEM:"permissionless-viem"}),Re=Object.freeze(Object.values(N)),Pe=Object.freeze({ACTIVE:"active",EXPIRED:"expired",REVOKED:"revoked"}),Le=1440*60*1e3;var R=["0x000000000022d473030f116ddee9f6b43ac78ba3"],P={4663:["0xcaf681a66d020601342297493863e78c959e5cb2","0x33e885ed0ec9bf04ecfb19341582aadcb4c8a9e7","0x1f7d7550b1b028f7571e69a784071f0205fd2efa","0x0bd7d308f8e1639fab988df18a8011f41eacad73","0x5fc5360d0400a0fd4f2af552add042d716f1d168","0xb477751b76cf82d00a686a1232f5fcd772414af3","0xff5cb29241f002ffed2eaa224e3e996d24a6e8d1"],8453:["0x2626664c2603336e57b271c5c0b26f421741e481","0x6ff5693b99212da76ad316178a184ab56d299b43","0x3d4e44eb1374240ce5f1b871ab261cd16335b76a","0x33128a8fc17869897dce68ed026d694621f6fdfd","0x4200000000000000000000000000000000000006","0x833589fcd6edb6e08f4c7c32d4f71b54bda02913","0xbe6d8f0d05cc4be24d5167a3ef062215be6d18a5","0x254cf9e1e6e233aa1ac962cb9b05b2cfeaae15b0","0x5e7bb104d84c7cb9b682aac2f3d509f5f406809a","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x888888888889758f76e7103c6cbf23abbf58f946","0x3f170631ed9821ca51a59d996ab095162438dc10","0x4f37a9d177470499a2dd084621020b023fcffc1f","0xc92e8bdf79f0507f65a392b0ab4667716bfe0110"],42161:["0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45","0x61ffe014ba17989e743c5f6cb21bf9697530b21e","0x82af49447d8a07e3bd95bd0d56f35241523fbab1","0xaf88d065e77c8cc2239327c5edb3a432268e5831","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xfd086bc7cd5c481dcc9c85ebe478a1c0b69fcbb9","0x888888888889758f76e7103c6cbf23abbf58f946","0xeaedc32a51c510d35ebc11088fd5ff2b47aacf2e","0x2191718cd32d02b8e60badffea33e4b5dd9a0a0d","0xc92e8bdf79f0507f65a392b0ab4667716bfe0110","0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41","0x7452c558d45f8afc8c83dae62c3f8a5be19c71f6"],1:["0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x4cd00e387622c35bddb9b4c962c136462338bc31","0x6a000f20005980200259b80c5102003040001068","0xae563e3f8219521950555f5962419c8919758ea2","0x45312ea0eff7e09c83cbe249fa1d7598c4c8cd4e","0xc92e8bdf79f0507f65a392b0ab4667716bfe0110"],137:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x0dcded3545d565ba3b19e683431381007245d983"],10:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xe2fa4e1d17725e72dcdafe943ecf45df4b9e285b","0x0dcded3545d565ba3b19e683431381007245d983"],56:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xa72c85c258a81761433b4e8da60505fe3dd551cc"],43114:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xf39ca6ede9bf7820a952b52f3c94af526bab9015","0x0dcded3545d565ba3b19e683431381007245d983","0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2","0x820f5ffc5b525cd4d88cd91acf2c28f16530cc68"],999:["0x0a0758d937d1059c356d4714e57f5df0239bce1a","0xd2002373543ce3527023c75e7518c274a51ce712"],2741:["0x4f8c9056bb8a3616693a76922fa35d53c056e5b3"],988:["0x026f252016a7c47cdef1f05a3fc9e20c92a49c37","0xff5cb29241f002ffed2eaa224e3e996d24a6e8d1","0x817997ca8394e26cce3de3a076a4889b27dbf9de","0x3dea4be5615974f31624404ef288ba3b36dfeb83","0xeaf7ac0fdf150cdd89340fb762d83848de6a7b83","0x779ded0c9e1022225f8e0630b35a9b54be713736","0xbc6f7725f08232c151b528bdfcaaf89993ca86ee"]},L={1:["0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x4cd00e387622c35bddb9b4c962c136462338bc31","0x6a000f20005980200259b80c5102003040001068","0xae563e3f8219521950555f5962419c8919758ea2","0x45312ea0eff7e09c83cbe249fa1d7598c4c8cd4e"],10:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xe2fa4e1d17725e72dcdafe943ecf45df4b9e285b","0x0dcded3545d565ba3b19e683431381007245d983"],56:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xa72c85c258a81761433b4e8da60505fe3dd551cc"],137:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x0dcded3545d565ba3b19e683431381007245d983"],988:["0x026f252016a7c47cdef1f05a3fc9e20c92a49c37","0xff5cb29241f002ffed2eaa224e3e996d24a6e8d1","0x3dea4be5615974f31624404ef288ba3b36dfeb83","0xbc6f7725f08232c151b528bdfcaaf89993ca86ee"],999:["0x0a0758d937d1059c356d4714e57f5df0239bce1a","0xd2002373543ce3527023c75e7518c274a51ce712"],2741:["0x4f8c9056bb8a3616693a76922fa35d53c056e5b3"],4663:["0xcaf681a66d020601342297493863e78c959e5cb2","0xb477751b76cf82d00a686a1232f5fcd772414af3","0xff5cb29241f002ffed2eaa224e3e996d24a6e8d1"],8453:["0x2626664c2603336e57b271c5c0b26f421741e481","0x6ff5693b99212da76ad316178a184ab56d299b43","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x888888888889758f76e7103c6cbf23abbf58f946","0x3f170631ed9821ca51a59d996ab095162438dc10","0x4f37a9d177470499a2dd084621020b023fcffc1f"],42161:["0x68b3465833fb72a70ecdf485e0e4c7bd8665fc45","0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0x888888888889758f76e7103c6cbf23abbf58f946","0xeaedc32a51c510d35ebc11088fd5ff2b47aacf2e","0x2191718cd32d02b8e60badffea33e4b5dd9a0a0d"],43114:["0x1231deb6f5749ef6ce6943a275a1d3e7486f4eae","0xf39ca6ede9bf7820a952b52f3c94af526bab9015","0x0dcded3545d565ba3b19e683431381007245d983"]};import{encodeFunctionData as k}from"viem";import{keccak256 as S,concat as y,getContractAddress as Q,encodeAbiParameters as ee}from"viem";import{readFileSync as te}from"node:fs";import{dirname as ne,join as re}from"node:path";import{fileURLToPath as ae}from"node:url";var v="0x4e59b44847b379578588920ca78fbf26c0b4956c";var D="0x365dc643926d7084c9e2f1ad68eb1a944b3aac8abe83c933aaf40c014579414f",I="0x6b557254c043c66fb0309ab9b8886340b5ce447295621ccd1b23862388bede7f",M="0xb7df21935c0b1ffe7da73781087bedfc0df078c47ff9d7187a8d866fd9f0e57a",se=Object.freeze({1:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Ethereum Pectra (2025-05-07) activated EIP-7702. https://ethereum.org/roadmap/pectra/7702/"}),10:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Live RPC mainnet.optimism.io 2026-08-25: eth_estimateGas type=0x4 \u2192 'EIP-7702 authorization list has invalid fields' (type-4 parsed)."}),56:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Live RPC bsc-dataseed.binance.org 2026-08-25: type=0x4 \u2192 'EIP-7702 transaction with empty auth list'."}),137:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Coinbase Developer Docs: EIP-7702 sponsored delegations on Polygon mainnet. https://docs.cdp.coinbase.com/wallets/using-wallets/eip-7702"}),988:Object.freeze({status:"ready",path:"session-vault",evidence:"No EIP-7702 (type-4 == type-2 21000). Nick factory present. Vault stack."}),999:Object.freeze({status:"ready",path:"session-vault",evidence:"Live RPC: EIP-7702 authorization list not supported. Nick factory present. Vault stack."}),2741:Object.freeze({status:"ready",path:"session-vault",evidence:"No 7702-specific RPC behavior; zkSync-family AA. Vault is the portable EVM lock."}),4663:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Live RPC rpc.mainnet.chain.robinhood.com 2026-08-25: type-4 empty-auth \u2192 EIP-7702 empty auth list. Nick factory present."}),8453:Object.freeze({status:"draft",path:"eip7702-delegate",evidence:"Foundry 9/9 Prague + committed deployedBytecodeHash. No on-chain module address yet."}),42161:Object.freeze({status:"ready",path:"eip7702-delegate",evidence:"Coinbase Developer Docs: EIP-7702 sponsored delegations on Arbitrum. https://docs.cdp.coinbase.com/wallets/using-wallets/eip-7702"}),43114:Object.freeze({status:"ready",path:"session-vault",evidence:"No 7702 activation (type-4 ignored as 21000). Nick factory present. Vault stack."})});function x(e){return se[Number(e)]||null}function T(e){return x(e)?.path==="eip7702-delegate"}function $(e){return x(e)?.path==="session-vault"}function z(e){return T(e)||$(e)}var oe=/^0x[0-9a-fA-F]{40}$/;function l(e){let t=String(e||"").trim().toLowerCase();if(!oe.test(t)||/^0x0{40}$/.test(t))throw new Error("session-chain-plan: owner must be a 20-byte address");return S(y([D,t]))}function A(e){return Q({opcode:"CREATE2",from:v,salt:l(e),bytecodeHash:O(e)}).toLowerCase()}var m;function ie(){if(m)return m;let e=re(ne(ae(import.meta.url)),"../../contracts/session-delegate/vault-creation.hex"),t=te(e,"utf8").trim().toLowerCase();if(!t.startsWith("0x")||t.length<10)throw new Error("session-chain-plan: vault creation bytecode missing");if(S(t)!==I)throw new Error("session-chain-plan: vault creation bytecode does not match VAULT_CREATION_CODE_HASH");return m=t,m}function V(e){let t=l(e);return y([t,U(e)])}function U(e){return l(e),y([ie(),ee([{type:"address"}],[String(e).trim().toLowerCase()])])}function O(e){return S(U(e))}var ce=/^0x[0-9a-fA-F]{40}$/;var W=!0;var Qe=Object.freeze({});function h(e){let t=Number(e);if(!z(t)){let r=x(t)?.evidence||"no session path";throw new Error(`pinned-session-module: chain ${t} refused \u2014 ${r}`)}return t}function de(e,t){let n=h(e),r=l(t),a=A(t),s=V(t);return Object.freeze({ok:!0,exec:!1,requiresUserSignature:!0,signingReady:!1,userCanSign:!0,broadcastReady:!1,executionReady:!1,chainId:n,stack:"session-vault",from:String(t).trim().toLowerCase(),to:v,value:"0",data:s,salt:r,saltScheme:"keccak256(oracle.session.vault.v1 || owner)",creationCodeHash:I,initCodeHash:O(t),predictedModule:a,bytecodeHash:M,initialize:Object.freeze({status:"blocked",reason:"recovery address not bound \u2014 name a cold key that is not the owner"}),note:"Unsigned CREATE2. Oracle will not broadcast. Fuse still off."})}var fe=(1n<<128n)-1n,ue=720*60*60*1e3;function le({capWei:e,expiresAtMs:t,nowMs:n=Date.now()}={}){let r=b(e??"0","capWei");if(r<=0n||r===fe)throw new Error("pinned-session-module: cap cannot be zero or limitless");let a=Number(t),s=Number(n);if(!Number.isFinite(a)||!Number.isFinite(s)||a<=s)throw new Error("pinned-session-module: expiry must be in the future");if(a-s>ue)throw new Error("pinned-session-module: expiry cannot exceed 30 days");return Object.freeze({ok:!0,capWei:r.toString(),expiresAtMs:a})}var pe=[{type:"function",name:"initialize",stateMutability:"nonpayable",inputs:[{name:"sessionOwner",type:"address"},{name:"sessionAgent",type:"address"},{name:"sessionRecovery",type:"address"},{name:"sessionGuardian",type:"address"},{name:"sessionExpiry",type:"uint48"},{name:"sessionCapWei",type:"uint128"},{name:"sessionDelay",type:"uint48"},{name:"targets",type:"address[]"}],outputs:[]}];function _(e,t){return e==null||String(e).trim()===""?null:c(e,t)}function H(e={}){let t=h(e.chainId),n=_(e.owner,"owner"),r=_(e.recovery,"recovery"),a=_(e.agent,"agent");if(!n)throw new Error("pinned-session-module: owner is required (the user's wallet)");if(!r)throw new Error("pinned-session-module: recovery is required (the user's spare key, never a house default)");if(n===r)throw new Error("pinned-session-module: recovery cannot be the owner");if(a&&(a===n||a===r))throw new Error("pinned-session-module: agent cannot be owner or recovery");let s=e.delaySeconds==null?3600:Number(e.delaySeconds);if(!Number.isFinite(s)||s<3600||s>720*3600)throw new Error("pinned-session-module: delay must be 1 hour\u201330 days");let i=de(t,n),p=e.guardian?c(e.guardian,"guardian"):null,d=[];Array.isArray(e.targets)&&e.targets.length&&(d=e.targets.map(K=>j(K,{chainId:t,banned:[n,r,a,p]})));let f={ok:!0,optional:!0,defaultOn:!1,exec:!1,requiresUserSignature:!0,signingReady:!1,broadcastReady:!1,executionReady:!1,chainId:t,owner:n,recovery:r,agent:a||null,guardian:p,predictedModule:i.predictedModule,deploy:i};if(!a||e.capWei==null||e.expiresAtMs==null)return Object.freeze({...f,initialize:Object.freeze({status:"blocked",reason:"agent, cap, and expiry are required \u2014 no house defaults",targets:d}),note:"Optional. Unsigned. User signs. Fuse off."});if(le({capWei:e.capWei,expiresAtMs:e.expiresAtMs,nowMs:e.nowMs}),d.length===0)throw new Error("pinned-session-module: native pay targets required \u2014 no router default");let u=Math.floor(Number(e.expiresAtMs)/1e3),X=k({abi:pe,functionName:"initialize",args:[n,a,r,f.guardian||"0x0000000000000000000000000000000000000000",u,BigInt(e.capWei),s,d]});return Object.freeze({...f,initialize:Object.freeze({status:"ready",exec:!1,requiresUserSignature:!0,userCanSign:!0,to:i.predictedModule,data:X,value:"0",targets:d,capWei:String(e.capWei),expiresAtMs:Number(e.expiresAtMs),delaySeconds:s}),userCanSign:!0,note:"Optional. Unsigned deploy + initialize. User wallet signs. Oracle does not broadcast. Fuse off."})}function c(e,t){let n=String(e||"").trim().toLowerCase();if(!ce.test(n))throw new Error(`pinned-session-module: ${t} must be a 20-byte address`);return n}function j(e,{chainId:t,banned:n=[]}={}){let r=c(e,"target");if(r==="0x0000000000000000000000000000000000000000"||n.map(i=>String(i||"").toLowerCase()).includes(r))throw new Error("pinned-session-module: target cannot be owner, recovery, agent, guardian, or zero");if(new Set([...L[Number(t)]||[],...P[Number(t)]||[],...R].map(i=>String(i).toLowerCase())).has(r))throw new Error("pinned-session-module: swap routers are not native-pay targets");return r}var be=[{type:"function",name:"execute",stateMutability:"payable",inputs:[{name:"target",type:"address"},{name:"value",type:"uint256"},{name:"data",type:"bytes"}],outputs:[]}];function F(e,t){return`${Number(e)}:${c(t,"owner")}`}function B(e={}){if(!W)throw new Error("pinned-session-module: optional vault spend is off");let t=h(e.chainId),n=c(e.owner,"owner"),r=c(e.recovery,"recovery"),a=c(e.agent,"agent");if(n===r)throw new Error("pinned-session-module: recovery cannot be the owner");if(a===n||a===r)throw new Error("pinned-session-module: agent cannot be owner or recovery");let s=(e.targets||[]).map(u=>c(u,"target"));if(!s.length)throw new Error("pinned-session-module: native pay targets required \u2014 no router default");let i=e.guardian?c(e.guardian,"guardian"):null;for(let u of s)j(u,{chainId:t,banned:[n,r,a,i]});let p=A(n),d=Object.freeze({optIn:!0,chainId:t,owner:n,recovery:r,agent:a,vault:p,targets:Object.freeze([...s])}),f=e.store;return f&&typeof f.set=="function"&&f.set(F(t,n),d),d}function me(e={}){let t=e.store;if(!t||typeof t.get!="function")return null;let n=h(e.chainId),r=c(e.owner,"owner");return t.get(F(n,r))||null}function G(e={}){if(!W)throw new Error("pinned-session-module: optional vault spend is off");let t=me(e);if(!t)throw new Error("pinned-session-module: not opted in");let n=c(e.target,"target");if(!t.targets.includes(n))throw new Error("pinned-session-module: target not permitted");let r=b(e.valueWei??"0","valueWei");if(r<0n)throw new Error("pinned-session-module: valueWei must not be negative");let a=k({abi:be,functionName:"execute",args:[n,r,"0x"]});return Object.freeze({ok:!0,optIn:!0,exec:!1,requiresUserSignature:!0,userCanSign:!0,signingReady:!1,broadcastReady:!1,executionReady:!1,chainId:t.chainId,from:t.agent,to:t.vault,value:"0",data:a,target:n,valueWei:r.toString(),note:"Unsigned vault.execute. Agent key signs. Oracle does not broadcast."})}var xe=`oracle session-vault \u2014 optional per-user vault (unsigned)
2
2
 
3
3
  oracle session-vault prepare ...
4
4
  oracle session-vault spend --chain <id> --owner 0x --recovery 0x --agent 0x \\
@@ -8,8 +8,8 @@ prepare: unsigned CREATE2 + initialize. Owner wallet signs.
8
8
  spend: unsigned vault.execute. Agent key signs. Skip = Oracle unchanged.
9
9
  7702 is not a lock. Oracle does not broadcast.
10
10
  `;function o(e,t){let n=e.indexOf(t);return n<0||n+1>=e.length?null:e[n+1]}function q(e,t){let n=[];for(let r=0;r<e.length;r++)e[r]===t&&e[r+1]&&n.push(e[++r]);return n}function Y(e,t){return e.exec||e.broadcastReady||e.executionReady?(t.write(`oracle session-vault: refused \u2014 ticket was execution-ready
11
- `),!0):!1}var nt={name:"session-vault",summary:"optional unsigned vault prepare/spend (no broadcast)",group:"prepare",usage:"oracle session-vault prepare|spend --chain <id> --owner 0x ...",async run(e){let t=e.argv||[],n=process.stdout,r=process.stderr;if(!t.length||t[0]==="--help"||t[0]==="-h"||t[0]==="help")return n.write(xe),0;let s=t.slice(1);try{if(t[0]==="prepare"){let a=H({chainId:Number(o(s,"--chain")),owner:o(s,"--owner"),recovery:o(s,"--recovery"),agent:o(s,"--agent"),capWei:o(s,"--cap-wei"),expiresAtMs:o(s,"--expires-ms")==null?null:Number(o(s,"--expires-ms")),targets:q(s,"--target")});return Y(a,r)?1:(n.write(JSON.stringify(a,null,2)+`
12
- `),0)}if(t[0]==="spend"){let a=new Map;B({chainId:Number(o(s,"--chain")),owner:o(s,"--owner"),recovery:o(s,"--recovery"),agent:o(s,"--agent"),targets:q(s,"--target"),store:a});let i=G({chainId:Number(o(s,"--chain")),owner:o(s,"--owner"),target:o(s,"--pay")||o(s,"--target"),valueWei:o(s,"--value-wei"),store:a});return Y(i,r)?1:(n.write(JSON.stringify(i,null,2)+`
11
+ `),!0):!1}var nt={name:"session-vault",summary:"optional unsigned vault prepare/spend (no broadcast)",group:"prepare",usage:"oracle session-vault prepare|spend --chain <id> --owner 0x ...",async run(e){let t=e.argv||[],n=process.stdout,r=process.stderr;if(!t.length||t[0]==="--help"||t[0]==="-h"||t[0]==="help")return n.write(xe),0;let a=t.slice(1);try{if(t[0]==="prepare"){let s=H({chainId:Number(o(a,"--chain")),owner:o(a,"--owner"),recovery:o(a,"--recovery"),agent:o(a,"--agent"),capWei:o(a,"--cap-wei"),expiresAtMs:o(a,"--expires-ms")==null?null:Number(o(a,"--expires-ms")),targets:q(a,"--target")});return Y(s,r)?1:(n.write(JSON.stringify(s,null,2)+`
12
+ `),0)}if(t[0]==="spend"){let s=new Map;B({chainId:Number(o(a,"--chain")),owner:o(a,"--owner"),recovery:o(a,"--recovery"),agent:o(a,"--agent"),targets:q(a,"--target"),store:s});let i=G({chainId:Number(o(a,"--chain")),owner:o(a,"--owner"),target:o(a,"--pay")||o(a,"--target"),valueWei:o(a,"--value-wei"),store:s});return Y(i,r)?1:(n.write(JSON.stringify(i,null,2)+`
13
13
  `),0)}return r.write(`oracle session-vault: prepare | spend only. Unsigned. No broadcast.
14
- `),1}catch(a){return r.write(`oracle session-vault: ${a.message}
14
+ `),1}catch(s){return r.write(`oracle session-vault: ${s.message}
15
15
  `),1}}};export{nt as default};