@oracle-agent/oracle 0.35.41 → 0.35.42

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 (43) hide show
  1. package/dist/agent-sessions.mjs +16 -16
  2. package/dist/assets/skills/oracle-desk-product/SKILL.md +1 -1
  3. package/dist/bin/desk-server.mjs +28 -28
  4. package/dist/bin/oracle-data-mcp.mjs +1 -1
  5. package/dist/bin/oracle-gateway.mjs +45 -45
  6. package/dist/bin/oracle-public-server.mjs +5 -5
  7. package/dist/bin/oracle-route.mjs +31 -31
  8. package/dist/bin/oracle.mjs +1 -1
  9. package/dist/cli/commands/agent-session.mjs +17 -17
  10. package/dist/cli/commands/auth.mjs +5 -5
  11. package/dist/cli/commands/chat.mjs +216 -215
  12. package/dist/cli/commands/doctor.mjs +5 -5
  13. package/dist/cli/commands/eval.mjs +175 -138
  14. package/dist/cli/commands/extension-policy.mjs +3 -3
  15. package/dist/cli/commands/harness.mjs +7 -7
  16. package/dist/cli/commands/model.mjs +220 -219
  17. package/dist/cli/commands/portfolio-risk.mjs +1 -1
  18. package/dist/cli/commands/project.mjs +7 -7
  19. package/dist/cli/commands/quickstart.mjs +4 -4
  20. package/dist/cli/commands/setup.mjs +13 -13
  21. package/dist/cli/commands/venues.mjs +2 -2
  22. package/dist/cli/project-access.mjs +3 -0
  23. package/dist/data/desk-data.mjs +26 -26
  24. package/dist/index.mjs +44 -44
  25. package/dist/notifications/index.mjs +8 -8
  26. package/dist/portfolio-risk.mjs +1 -1
  27. package/dist/tui/standalone-client.mjs +86 -85
  28. package/package.json +2 -1
  29. package/public/oracle-splash/docs/browser-and-web/index.html +2 -2
  30. package/public/oracle-splash/docs/connectors/index.html +2 -2
  31. package/public/oracle-splash/docs/getting-started/index.html +2 -2
  32. package/public/oracle-splash/docs/index.html +3 -3
  33. package/public/oracle-splash/docs/reference/index.html +2 -2
  34. package/public/oracle-splash/docs/security/index.html +2 -2
  35. package/public/oracle-splash/docs/using-oracle/index.html +2 -2
  36. package/public/oracle-splash/download/index.html +4 -4
  37. package/public/oracle-splash/downloads/index.html +1 -1
  38. package/public/oracle-splash/eval/archive/oracle-0.35.40.json +101 -0
  39. package/public/oracle-splash/eval/archive/oracle-0.35.41-blocked-attempt.json +672 -0
  40. package/public/oracle-splash/eval/index.html +34 -26
  41. package/public/oracle-splash/eval/releases/oracle-0.35.41.json +788 -0
  42. package/public/oracle-splash/index.html +7 -7
  43. package/server.json +2 -2
@@ -1,4 +1,4 @@
1
- var z=Object.freeze({assetHighPct:50,assetMediumPct:25,chainHighPct:75,venueHighPct:60,stablecoinHighPct:70}),R=new Set(["USDC","USDT","USDT0","DAI","FRAX","LUSD","TUSD","USDP","GUSD","PYUSD","USDE"]);function x(n){if(n===null||n===""||n===void 0)return null;let e=Number(n);return Number.isFinite(e)&&e>=0?e:null}function v(n){return Math.round((n+Number.EPSILON)*1e8)/1e8}function $(n,e){return e>0?v(n/e*100):null}function E(n){return n.address||n.owner||n.walletAddress||n.wallet?.address||null}function q(n){let e=Array.isArray(n)?n:Array.isArray(n?.entries)?n.entries:[],i=new Map;for(let t of e){if(!t?.address)continue;let r=String(t.address).toLowerCase();i.has(r)||i.set(r,t)}return i}function m(n,e,i={}){if(!e||typeof e!="object")return;let t=String(e.symbol??e.coin??e.name??e.collection??e.tokenId??"unknown"),r=x(e.usdValue??e.valueUsd??e.knownUsd??e.estimatedValueUsd??e.floorValueUsd),s=e.kind==="nft"||e.type==="nft"||e.collection||e.tokenId!=null?"nft":"fungible";n.push({symbol:t,usdValue:r,chain:String(e.chain??e.chainName??i.chain??"unknown"),venue:String(e.venue??e.protocol??e.platform??i.venue??"wallet"),address:e.address??i.address??null,kind:s,stablecoin:e.stablecoin===!0||R.has(t.toUpperCase())})}function B(n){let e=[],i=E(n);for(let t of n.assets||n.holdings||[])m(e,t,{address:i,chain:n.chain,venue:n.venue});for(let t of n.chains||[]){let r=t.chain??t.name??t.slug??(t.chainId!=null?String(t.chainId):t.family)??"unknown",s={address:t.address??i,chain:r,venue:t.venue};t.native&&(t.native.amount==null||Number(t.native.amount)!==0)&&m(e,{...t.native,symbol:t.native.symbol??t.symbol??r},s);for(let a of t.assets||t.fungibleTokens?.assets||[])m(e,a,s);for(let a of t.collectibles?.assets||t.nfts||[])m(e,{...a,kind:"nft"},s);for(let a of t.spot?.balances||[])m(e,a,{...s,venue:"Hyperliquid spot"});let l=x(t.perps?.accountValueUsd);l!=null&&m(e,{symbol:"perps account",usdValue:l},{...s,venue:"Hyperliquid perps"})}for(let t of n.inventory?.items||n.nfts?.items||[])m(e,{...t,kind:"nft"},{address:i,chain:t.chain??n.chain,venue:t.marketplace??n.venue});return e}function _(n,e){let i=E(n),t=n.chain??n.chainId??n.family??"*";return i?`${String(i).toLowerCase()}|${String(t).toLowerCase()}`:`snapshot:${e}`}function O(n,e,i){let t=new Map;for(let r of n){if(r.usdValue==null)continue;let s=r[e];t.set(s,(t.get(s)||0)+r.usdValue)}return[...t].map(([r,s])=>({name:r,knownUsd:v(s),percentOfKnown:$(s,i)})).sort((r,s)=>s.knownUsd-r.knownUsd||r.name.localeCompare(s.name))}function T(n={},e={}){let i=Array.isArray(n)?n:Array.isArray(n.snapshots)?n.snapshots:n.snapshot?[n.snapshot]:[],t=q(e.labels??e.addressBook??n.labels??n.addressBook),r={...z,...n.thresholds||{},...e.thresholds||{}},s=[],l=new Set,a=0;i.forEach((o,c)=>{if(!o||typeof o!="object")return;let I=_(o,c);l.has(I)?a+=1:(l.add(I),s.push(o))});let h=s.flatMap(B),u=h.filter(o=>o.usdValue!=null),j=h.filter(o=>o.usdValue==null),F=s.reduce((o,c)=>o+Number(c.valuation?.unpricedNonzeroItems||c.unpricedNonzeroItems||0),0),f=v(u.reduce((o,c)=>o+c.usdValue,0)),g=j.length+F,y=O(u,"chain",f),w=O(u,"venue",f),k=O(u,"symbol",f);for(let o of y)o.chain=o.name;for(let o of w)o.venue=o.name;for(let o of k)o.asset=o.name,o.symbol=o.name;let S=v(u.filter(o=>o.stablecoin).reduce((o,c)=>o+c.usdValue,0)),b=h.filter(o=>o.kind==="nft"),P=s.reduce((o,c)=>o+Number(c.valuation?.nftUnvaluedItems||0),0),A=b.filter(o=>o.usdValue==null).length+P,J=b.filter(o=>o.usdValue!=null).length,d=k[0]||null,U=d?d.percentOfKnown>=r.assetHighPct?"high":d.percentOfKnown>=r.assetMediumPct?"medium":"low":"unknown",p=[];g&&p.push(`${g} nonzero holding(s) have unknown USD value; they are excluded from totals and percentages.`),A&&p.push("NFT valuation coverage is partial; estimates are not executable bids and unvalued NFTs are not treated as zero."),a&&p.push(`${a} duplicate address/chain snapshot(s) were ignored.`),d&&U!=="low"&&p.push(`Asset concentration is ${U}: ${d.name} is ${d.percentOfKnown}% of known value.`),y[0]?.percentOfKnown>=r.chainHighPct&&p.push(`Chain concentration is high: ${y[0].name} is ${y[0].percentOfKnown}% of known value.`),w[0]?.percentOfKnown>=r.venueHighPct&&p.push(`Venue concentration is high: ${w[0].name} is ${w[0].percentOfKnown}% of known value.`);let M=s.map(E).filter(Boolean).map(o=>{let c=t.get(String(o).toLowerCase());return{address:o,label:c?.label??null,who:c?.who??null,role:c?.role??null}});return{totalKnownUsd:f,coverage:{complete:s.length>0&&g===0&&s.every(o=>o.valuation?.complete!==!1&&o.coverage?.complete!==!1),label:g===0&&s.length&&s.every(o=>o.valuation?.complete!==!1&&o.coverage?.complete!==!1)?"complete for the supplied snapshots":"known priced value only; portfolio coverage is partial or unverified",unknownUsd:g?null:0,pricedItemCount:u.length,unknownItemCount:g,snapshotCount:s.length,duplicatesIgnored:a},chainExposures:y,venueExposures:w,topAssets:k.slice(0,Math.max(1,Number(e.topAssets??n.topAssets??10))),concentrationRisk:{level:U,topAsset:d?.name??null,topAssetPercent:d?.percentOfKnown??null,thresholds:{mediumPct:r.assetMediumPct,highPct:r.assetHighPct}},stablecoinExposure:{knownUsd:S,percentOfKnown:$(S,f),high:f>0&&$(S,f)>=r.stablecoinHighPct},nftCoverage:{status:b.length||P?A?"partial":"valued":"not-observed",valuedItems:J,unvaluedItems:A,knownUsd:v(b.filter(o=>o.usdValue!=null).reduce((o,c)=>o+c.usdValue,0))},addresses:M,warnings:[...new Set(p)]}}import V from"node:fs";var C=1024*1024;function K(n=[],e={}){let i=[],t={};for(let r=0;r<n.length;r+=1){let s=n[r];if(!s.startsWith("--")){i.push(s);continue}let l=s.indexOf("="),a=s.slice(2,l===-1?void 0:l),h=e[a];if(!h)throw new TypeError(`unknown option --${a}`);if(Object.hasOwn(t,a))throw new TypeError(`duplicate option --${a}`);if(h==="boolean"){if(l!==-1)throw new TypeError(`option --${a} does not take a value`);t[a]=!0;continue}let u=l===-1?n[++r]:s.slice(l+1);if(u==null||u===""||u.startsWith("--"))throw new TypeError(`option --${a} requires a value`);t[a]=u}return{positionals:i,options:t}}function D(n,e="input"){if(!n)throw new TypeError(`${e} JSON path or - is required`);let i=n==="-"?V.readFileSync(0):V.readFileSync(n);if(i.length>C)throw new RangeError(`${e} exceeds ${C} bytes`);let t;try{t=JSON.parse(i.toString("utf8"))}catch(r){throw new TypeError(`${e} must be valid JSON: ${r.message}`)}if(!t||typeof t!="object"||Array.isArray(t)||Object.getPrototypeOf(t)!==Object.prototype)throw new TypeError(`${e} must be a JSON object`);return t}function H(n,e=process.stdout){e.write(`${JSON.stringify(n,null,2)}
1
+ var z=Object.freeze({assetHighPct:50,assetMediumPct:25,chainHighPct:75,venueHighPct:60,stablecoinHighPct:70}),R=new Set(["USDC","USDT","USDT0","DAI","FRAX","LUSD","TUSD","USDP","GUSD","PYUSD","USDE"]);function x(n){if(n===null||n===""||n===void 0)return null;let e=Number(n);return Number.isFinite(e)&&e>=0?e:null}function v(n){return Math.round((n+Number.EPSILON)*1e8)/1e8}function $(n,e){return e>0?v(n/e*100):null}function E(n){return n.address||n.owner||n.walletAddress||n.wallet?.address||null}function q(n){let e=Array.isArray(n)?n:Array.isArray(n?.entries)?n.entries:[],i=new Map;for(let t of e){if(!t?.address)continue;let r=String(t.address).toLowerCase();i.has(r)||i.set(r,t)}return i}function m(n,e,i={}){if(!e||typeof e!="object")return;let t=String(e.symbol??e.coin??e.name??e.collection??e.tokenId??"unknown"),r=x(e.usdValue??e.valueUsd??e.knownUsd??e.estimatedValueUsd??e.floorValueUsd),s=e.kind==="nft"||e.type==="nft"||e.collection||e.tokenId!=null?"nft":"fungible";n.push({symbol:t,usdValue:r,chain:String(e.chain??e.chainName??i.chain??"unknown"),venue:String(e.venue??e.protocol??e.platform??i.venue??"wallet"),address:e.address??i.address??null,kind:s,stablecoin:e.stablecoin===!0||R.has(t.toUpperCase())})}function B(n){let e=[],i=E(n);for(let t of n.assets||n.holdings||[])m(e,t,{address:i,chain:n.chain,venue:n.venue});for(let t of n.chains||[]){let r=t.chain??t.name??t.slug??(t.chainId!=null?String(t.chainId):t.family)??"unknown",s={address:t.address??i,chain:r,venue:t.venue};t.native&&t.native.status!=="unavailable"&&(t.native.amount==null||Number(t.native.amount)!==0)&&m(e,{...t.native,symbol:t.native.symbol??t.symbol??r},s);for(let a of t.assets||t.fungibleTokens?.assets||[])m(e,a,s);for(let a of t.collectibles?.assets||t.nfts||[])m(e,{...a,kind:"nft"},s);for(let a of t.spot?.balances||[])m(e,a,{...s,venue:"Hyperliquid spot"});let l=x(t.perps?.accountValueUsd);l!=null&&m(e,{symbol:"perps account",usdValue:l},{...s,venue:"Hyperliquid perps"})}for(let t of n.inventory?.items||n.nfts?.items||[])m(e,{...t,kind:"nft"},{address:i,chain:t.chain??n.chain,venue:t.marketplace??n.venue});return e}function _(n,e){let i=E(n),t=n.chain??n.chainId??n.family??"*";return i?`${String(i).toLowerCase()}|${String(t).toLowerCase()}`:`snapshot:${e}`}function O(n,e,i){let t=new Map;for(let r of n){if(r.usdValue==null)continue;let s=r[e];t.set(s,(t.get(s)||0)+r.usdValue)}return[...t].map(([r,s])=>({name:r,knownUsd:v(s),percentOfKnown:$(s,i)})).sort((r,s)=>s.knownUsd-r.knownUsd||r.name.localeCompare(s.name))}function T(n={},e={}){let i=Array.isArray(n)?n:Array.isArray(n.snapshots)?n.snapshots:n.snapshot?[n.snapshot]:[],t=q(e.labels??e.addressBook??n.labels??n.addressBook),r={...z,...n.thresholds||{},...e.thresholds||{}},s=[],l=new Set,a=0;i.forEach((o,c)=>{if(!o||typeof o!="object")return;let I=_(o,c);l.has(I)?a+=1:(l.add(I),s.push(o))});let h=s.flatMap(B),u=h.filter(o=>o.usdValue!=null),j=h.filter(o=>o.usdValue==null),F=s.reduce((o,c)=>o+Number(c.valuation?.unpricedNonzeroItems||c.unpricedNonzeroItems||0),0),f=v(u.reduce((o,c)=>o+c.usdValue,0)),g=j.length+F,y=O(u,"chain",f),w=O(u,"venue",f),k=O(u,"symbol",f);for(let o of y)o.chain=o.name;for(let o of w)o.venue=o.name;for(let o of k)o.asset=o.name,o.symbol=o.name;let S=v(u.filter(o=>o.stablecoin).reduce((o,c)=>o+c.usdValue,0)),b=h.filter(o=>o.kind==="nft"),P=s.reduce((o,c)=>o+Number(c.valuation?.nftUnvaluedItems||0),0),A=b.filter(o=>o.usdValue==null).length+P,J=b.filter(o=>o.usdValue!=null).length,d=k[0]||null,U=d?d.percentOfKnown>=r.assetHighPct?"high":d.percentOfKnown>=r.assetMediumPct?"medium":"low":"unknown",p=[];g&&p.push(`${g} nonzero holding(s) have unknown USD value; they are excluded from totals and percentages.`),A&&p.push("NFT valuation coverage is partial; estimates are not executable bids and unvalued NFTs are not treated as zero."),a&&p.push(`${a} duplicate address/chain snapshot(s) were ignored.`),d&&U!=="low"&&p.push(`Asset concentration is ${U}: ${d.name} is ${d.percentOfKnown}% of known value.`),y[0]?.percentOfKnown>=r.chainHighPct&&p.push(`Chain concentration is high: ${y[0].name} is ${y[0].percentOfKnown}% of known value.`),w[0]?.percentOfKnown>=r.venueHighPct&&p.push(`Venue concentration is high: ${w[0].name} is ${w[0].percentOfKnown}% of known value.`);let M=s.map(E).filter(Boolean).map(o=>{let c=t.get(String(o).toLowerCase());return{address:o,label:c?.label??null,who:c?.who??null,role:c?.role??null}});return{totalKnownUsd:f,coverage:{complete:s.length>0&&g===0&&s.every(o=>o.valuation?.complete!==!1&&o.coverage?.complete!==!1),label:g===0&&s.length&&s.every(o=>o.valuation?.complete!==!1&&o.coverage?.complete!==!1)?"complete for the supplied snapshots":"known priced value only; portfolio coverage is partial or unverified",unknownUsd:g?null:0,pricedItemCount:u.length,unknownItemCount:g,snapshotCount:s.length,duplicatesIgnored:a},chainExposures:y,venueExposures:w,topAssets:k.slice(0,Math.max(1,Number(e.topAssets??n.topAssets??10))),concentrationRisk:{level:U,topAsset:d?.name??null,topAssetPercent:d?.percentOfKnown??null,thresholds:{mediumPct:r.assetMediumPct,highPct:r.assetHighPct}},stablecoinExposure:{knownUsd:S,percentOfKnown:$(S,f),high:f>0&&$(S,f)>=r.stablecoinHighPct},nftCoverage:{status:b.length||P?A?"partial":"valued":"not-observed",valuedItems:J,unvaluedItems:A,knownUsd:v(b.filter(o=>o.usdValue!=null).reduce((o,c)=>o+c.usdValue,0))},addresses:M,warnings:[...new Set(p)]}}import V from"node:fs";var C=1024*1024;function K(n=[],e={}){let i=[],t={};for(let r=0;r<n.length;r+=1){let s=n[r];if(!s.startsWith("--")){i.push(s);continue}let l=s.indexOf("="),a=s.slice(2,l===-1?void 0:l),h=e[a];if(!h)throw new TypeError(`unknown option --${a}`);if(Object.hasOwn(t,a))throw new TypeError(`duplicate option --${a}`);if(h==="boolean"){if(l!==-1)throw new TypeError(`option --${a} does not take a value`);t[a]=!0;continue}let u=l===-1?n[++r]:s.slice(l+1);if(u==null||u===""||u.startsWith("--"))throw new TypeError(`option --${a} requires a value`);t[a]=u}return{positionals:i,options:t}}function D(n,e="input"){if(!n)throw new TypeError(`${e} JSON path or - is required`);let i=n==="-"?V.readFileSync(0):V.readFileSync(n);if(i.length>C)throw new RangeError(`${e} exceeds ${C} bytes`);let t;try{t=JSON.parse(i.toString("utf8"))}catch(r){throw new TypeError(`${e} must be valid JSON: ${r.message}`)}if(!t||typeof t!="object"||Array.isArray(t)||Object.getPrototypeOf(t)!==Object.prototype)throw new TypeError(`${e} must be a JSON object`);return t}function H(n,e=process.stdout){e.write(`${JSON.stringify(n,null,2)}
2
2
  `)}function L(n,e=process.stderr){return e.write(`oracle: ${n instanceof Error?n.message:String(n)}
3
3
  `),2}var N="oracle portfolio-risk <input.json|->",Z={name:"portfolio-risk",summary:"summarize supplied portfolio concentration and coverage",group:"read",usage:N,async run(n){let e=n.argv??[];if(e.length===0||e.includes("--help")||e.includes("-h"))return process.stdout.write(`${N}
4
4
  `),0;try{let{positionals:i}=K(e);if(i.length!==1)throw new TypeError(N);return H(T(D(i[0]))),0}catch(i){return L(i)}}};export{Z as default};
@@ -1,5 +1,5 @@
1
- import d from"node:fs";import i from"node:path";import{homedir as L}from"node:os";import m from"node:fs";import w from"node:path";import B from"node:readline/promises";import{homedir as I}from"node:os";var R=40,y=64;function O(e=process.env){return e&&e.ORACLE_CONFIG_DIR||w.join(I(),".config","oracle")}function A(e=process.env){return w.join(O(e),"projects.json")}function f(e,{platform:o=process.platform}={}){let t=String(e||"").trim();if(!t)return"";if(o==="win32"){let n=t.replace(/\//g,"\\");for(;n.length>3&&n.endsWith("\\");)n=n.slice(0,-1);return n}let r=t.replace(/\\/g,"/").replace(/\/{2,}/g,"/");return r.length>1&&r.endsWith("/")&&(r=r.slice(0,-1)),r}function _(e,o,{platform:t=process.platform}={}){let r=f(e,{platform:t}),n=f(o,{platform:t});return!r||!n?!1:t==="win32"?r.toLowerCase()===n.toLowerCase():r===n}function k(e){try{let o=JSON.parse(m.readFileSync(A(e),"utf8"));return!o||typeof o!="object"||!Array.isArray(o.projects)?{version:1,projects:[],lastProjectId:""}:o}catch{return{version:1,projects:[],lastProjectId:""}}}function $(e,o){let t=A(o);m.mkdirSync(w.dirname(t),{recursive:!0,mode:448}),m.writeFileSync(t,`${JSON.stringify(e,null,2)}
2
- `,{mode:384})}function g(e,o){let t=String(e||"").trim().replace(/\s+/g," ");return t?t.slice(0,y):(w.basename(f(o)||"project")||"project").slice(0,y)}function p({env:e=process.env}={}){return[...k(e).projects].sort((t,r)=>(r.updatedAt||0)-(t.updatedAt||0))}var D=new Set(["none","read","write"]);function v(e,o="none"){return D.has(e)?e:o}function S(e,{env:o=process.env,now:t=Date.now,platform:r=process.platform}={}){let n=f(e?.cwd,{platform:r});if(!n)throw new Error("project cwd is required");let c=typeof t=="function"?t():t,s=k(o),a=s.projects.find(h=>_(h.cwd,n,{platform:r})),u=e?.access!=null?v(e.access):v(a?.access),l=a?{...a,name:g(e.name||a.name,n),cwd:n,access:u,updatedAt:c}:{id:`p${c.toString(36)}`,name:g(e.name,n),cwd:n,access:u,createdAt:c,updatedAt:c};return s.version=1,s.projects=[l,...s.projects.filter(h=>h.id!==l.id)].slice(0,R),s.lastProjectId=l.id,$(s,o),l}var N=new Set(["none","read","write"]),W=new Set(["/","/etc","/dev","/proc","/sys","/root","/var","/usr","/bin","/sbin","/boot","/home","/Users","/private"]);function T(e,o){if(o===e)return!0;let t=i.relative(e,o);return t!==""&&!t.startsWith("..")&&!i.isAbsolute(t)}function x(e){return N.has(e)?e:"none"}function P(e,{home:o=L()}={}){if(typeof e!="string"||!e||!i.isAbsolute(e))return"path must be absolute";let t=o;try{t=d.realpathSync(o)}catch{t=i.resolve(o)}if(e===t)return"home directory";if(T(e,t)&&e!==t)return"parent of the home directory";if(W.has(e))return e;let r=e.split(i.sep).join("/");return/(^|\/)\.ssh(\/|$)/i.test(r)?"SSH directory":/(^|\/)keys(\/|$)/i.test(r)?"key material directory":null}function H(e){let o=String(e||"").trim()||process.cwd(),t=i.resolve(o),r;try{r=d.realpathSync(t)}catch(s){throw new Error(`project allow: path does not exist (${s.code||s.message})`)}if(!d.statSync(r).isDirectory())throw new Error("project allow: path must be a directory");let c=P(r);if(c)throw new Error(`project allow refused: ${c}`);return r}function C(e,{access:o="write",env:t=process.env,platform:r=process.platform}={}){let n=H(e),c=x(o)==="read"?"read":"write";return S({cwd:n,access:c},{env:t,platform:r})}function E(e,{env:o=process.env,platform:t=process.platform}={}){let r=i.resolve(String(e||"").trim()||process.cwd()),n=p({env:o}).find(c=>{try{return d.realpathSync(c.cwd)===d.realpathSync(r)}catch{return i.resolve(c.cwd)===r}});if(!n)throw new Error("project deny: no saved project for that path");return S({...n,cwd:n.cwd,access:"none"},{env:o,platform:t})}function b({env:e=process.env,mode:o="read"}={}){let t=o==="write",r=[];for(let n of p({env:e})){let c=x(n.access);if(c==="none"||t&&c!=="write")continue;let s;try{s=d.realpathSync(n.cwd)}catch{continue}P(s)||r.includes(s)||r.push(s)}return r}var j=`oracle project: folder permissions for chat file tools.
1
+ import l from"node:fs";import a from"node:path";import{homedir as Z}from"node:os";import y from"node:fs";import m from"node:path";import X from"node:readline/promises";import{homedir as C}from"node:os";var O=40,k=64;function L(e=process.env){return e&&e.ORACLE_CONFIG_DIR||m.join(C(),".config","oracle")}function A(e=process.env){return m.join(L(e),"projects.json")}function h(e,{platform:r=process.platform}={}){let t=String(e||"").trim();if(!t)return"";if(r==="win32"){let o=t.replace(/\//g,"\\");for(;o.length>3&&o.endsWith("\\");)o=o.slice(0,-1);return o}let n=t.replace(/\\/g,"/").replace(/\/{2,}/g,"/");return n.length>1&&n.endsWith("/")&&(n=n.slice(0,-1)),n}function T(e,r,{platform:t=process.platform}={}){let n=h(e,{platform:t}),o=h(r,{platform:t});return!n||!o?!1:t==="win32"?n.toLowerCase()===o.toLowerCase():n===o}function x(e){try{let r=JSON.parse(y.readFileSync(A(e),"utf8"));return!r||typeof r!="object"||!Array.isArray(r.projects)?{version:1,projects:[],lastProjectId:""}:r}catch{return{version:1,projects:[],lastProjectId:""}}}function P(e,r){let t=A(r);y.mkdirSync(m.dirname(t),{recursive:!0,mode:448}),y.writeFileSync(t,`${JSON.stringify(e,null,2)}
2
+ `,{mode:384})}function S(e,r){let t=String(e||"").trim().replace(/\s+/g," ");return t?t.slice(0,k):(m.basename(h(r)||"project")||"project").slice(0,k)}function u({env:e=process.env}={}){return[...x(e).projects].sort((t,n)=>(n.updatedAt||0)-(t.updatedAt||0))}var D=new Set(["none","read","write"]);function E(e,r="none"){return D.has(e)?e:r}function w(e,{env:r=process.env,now:t=Date.now,platform:n=process.platform}={}){let o=h(e?.cwd,{platform:n});if(!o)throw new Error("project cwd is required");let s=typeof t=="function"?t():t,i=x(r),c=i.projects.find(g=>T(g.cwd,o,{platform:n})),d=e?.access!=null?E(e.access):E(c?.access),p=c?{...c,name:S(e.name||c.name,o),cwd:o,access:d,updatedAt:s}:{id:`p${s.toString(36)}`,name:S(e.name,o),cwd:o,access:d,createdAt:s,updatedAt:s};return i.version=1,i.projects=[p,...i.projects.filter(g=>g.id!==p.id)].slice(0,O),i.lastProjectId=p.id,P(i,r),p}import v from"node:path";import{homedir as M}from"node:os";var z=(process.env.ORACLE_REDACT_SECRETS??"true").toLowerCase(),te=["1","true","yes","on"].includes(z);var F=new Set(["access_token","refresh_token","id_token","token","api_key","apikey","client_secret","password","auth","jwt","session","secret","key","code","signature","x-amz-signature","private_key","authorization"]),re=new Set([...F].map(e=>e.replace(/[^a-z0-9]/gi,"").toLowerCase()));var ce=process.env.ORACLE_CONFIG_DIR||v.join(M(),".config","oracle"),le=128*1024,ue=200*1024,B=[[/(^|\/)keys(\/|$)/i,"key material directory (keys/)"],[/(^|\/)(?:[^/]*\.env|\.env\.[^/]+)$/i,"environment file"],[/(^|\/)(?:\.aws|\.azure|\.gnupg|\.kube|\.docker)(\/|$)/i,"credential configuration directory"],[/(^|\/)signer[^/]*/i,"signer material"],[/\.key$/i,"private key file"],[/\.pem$/i,"PEM key or certificate"],[/(^|\/)id_(?:rsa|dsa|ecdsa|ed25519)/i,"SSH private key"],[/(^|\/)\.git-credentials$/i,"Git credentials"],[/(^|\/)\.ssh(\/|$)/i,"SSH configuration directory"],[/^\/dev(\/|$)/i,"device filesystem"],[/^\/proc(\/|$)/i,"kernel process filesystem"]];function $(e){let r=e.split(v.sep).join("/");for(let[t,n]of B)if(t.test(r))return n;return null}var W=2e3,b=2e3;var fe=5*1024*1024,de=64*1024,pe=1536*1024;var he=[{type:"function",function:{name:"file_read",description:"Read a UTF-8 text file from the agent workspace or an operator-allowed project folder. Key material and paths outside those folders are refused.",parameters:{type:"object",properties:{path:{type:"string",description:"Path relative to the agent workspace"},offset:{type:"integer",minimum:1,description:"1-indexed line to start from (default 1)"},limit:{type:"integer",minimum:1,maximum:b,description:`Maximum lines to return (default ${W}, max ${b})`}},required:["path"],additionalProperties:!1}}},{type:"function",function:{name:"file_write",description:"Write a UTF-8 text file into the agent workspace or an operator-allowed project folder. Writes still ask first. Key material stays refused.",parameters:{type:"object",properties:{path:{type:"string",description:"Path relative to the agent workspace"},content:{type:"string",description:"File contents to write"}},required:["path","content"],additionalProperties:!1}}}];var G=new Set(["none","read","write"]),K=new Set(["/","/etc","/dev","/proc","/sys","/root","/var","/usr","/bin","/sbin","/boot","/home","/Users","/private"]);function f(e,r){if(r===e)return!0;let t=a.relative(e,r);return t!==""&&!t.startsWith("..")&&!a.isAbsolute(t)}function U(e){return G.has(e)?e:"none"}function R(e,{home:r=Z()}={}){if(typeof e!="string"||!e||!a.isAbsolute(e))return"path must be absolute";let t=r;try{t=l.realpathSync(r)}catch{t=a.resolve(r)}if(e===t)return"home directory";if(f(e,t)&&e!==t)return"parent of the home directory";for(let s of K)if(e===s||!["/","/home","/Users"].includes(s)&&f(s,e))return s;if((f("/home",e)||f("/Users",e))&&!f(t,e))return"other user home";if(/(^|\/)\.config(\/|$)/i.test(e))return"configuration directory";let n=$(e);if(n)return n;let o=e.split(a.sep).join("/");return/(^|\/)\.ssh(\/|$)/i.test(o)?"SSH directory":/(^|\/)keys(\/|$)/i.test(o)?"key material directory":null}function J(e){let r=String(e||"").trim()||process.cwd(),t=a.resolve(r),n;try{n=l.realpathSync(t)}catch(i){throw new Error(`project allow: path does not exist (${i.code||i.message})`)}if(!l.statSync(n).isDirectory())throw new Error("project allow: path must be a directory");let s=R(n);if(s)throw new Error(`project allow refused: ${s}`);return n}function j(e,{access:r="write",env:t=process.env,platform:n=process.platform}={}){if(r!=="read"&&r!=="write")throw new Error("project allow: access must be read or write");let o=J(e);return w({cwd:o,access:r},{env:t,platform:n})}function I(e,{env:r=process.env,platform:t=process.platform}={}){let n=a.resolve(String(e||"").trim()||process.cwd()),o=u({env:r}).find(s=>{try{return l.realpathSync(s.cwd)===l.realpathSync(n)}catch{return a.resolve(s.cwd)===n}});if(!o)throw new Error("project deny: no saved project for that path");return w({...o,cwd:o.cwd,access:"none"},{env:r,platform:t})}function N({env:e=process.env,mode:r="read"}={}){let t=r==="write",n=[];for(let o of u({env:e})){let s=U(o.access);if(s==="none"||t&&s!=="write")continue;let i;try{i=l.realpathSync(o.cwd)}catch{continue}i!==a.resolve(o.cwd)||R(i)||n.includes(i)||n.push(i)}return n}var _=`oracle project: folder permissions for chat file tools.
3
3
 
4
4
  Remembering a chat is not permission. You have to allow a folder.
5
5
 
@@ -10,8 +10,8 @@ import d from"node:fs";import i from"node:path";import{homedir as L}from"node:os
10
10
 
11
11
  Home, /, and key folders stay refused. Writes still ask first.
12
12
  Default path is the current directory.
13
- `;function M(e=[]){let o={},t=[];for(let r of e)r==="--read"?o.read=!0:r==="--help"||r==="-h"?o.help=!0:t.push(r);return{flags:o,positional:t}}var ee={name:"project",summary:"allow or deny local folders the chat bot may read and write",group:"read",usage:j,async run(e){let{flags:o,positional:t}=M(e.argv||[]),r=t[0];if(!r||o.help)return process.stdout.write(j),0;if(r==="allow"){let n=C(t[1],{access:o.read?"read":"write"});return process.stdout.write(`allowed ${n.access} ${n.cwd}
14
- `),0}if(r==="deny"){let n=E(t[1]);return process.stdout.write(`denied ${n.cwd}
15
- `),0}if(r==="list"){let n=new Set(b({mode:"read"})),c=p().filter(s=>s.access&&s.access!=="none");if(!c.length)return process.stdout.write(`no folder grants. run: oracle project allow .
16
- `),0;for(let s of c){let a=n.has(s.cwd)||[...n].some(u=>s.cwd.startsWith(`${u}/`));process.stdout.write(`${s.access.padEnd(5)} ${s.cwd}${a?"":" (missing)"}
17
- `)}return 0}return process.stderr.write(j),1}};export{ee as default};
13
+ `;function Y(e=[]){let r={},t=[];for(let n of e)n==="--read"?r.read=!0:n==="--help"||n==="-h"?r.help=!0:t.push(n);return{flags:r,positional:t}}var xe={name:"project",summary:"allow or deny local folders the chat bot may read and write",group:"read",usage:_,async run(e){let{flags:r,positional:t}=Y(e.argv||[]),n=t[0];if(!n||r.help)return process.stdout.write(_),0;if(n==="allow"){let o=j(t[1],{access:r.read?"read":"write"});return process.stdout.write(`allowed ${o.access} ${o.cwd}
14
+ `),0}if(n==="deny"){let o=I(t[1]);return process.stdout.write(`denied ${o.cwd}
15
+ `),0}if(n==="list"){let o=new Set(N({mode:"read"})),s=u().filter(i=>i.access&&i.access!=="none");if(!s.length)return process.stdout.write(`no folder grants. run: oracle project allow .
16
+ `),0;for(let i of s){let c=o.has(i.cwd)||[...o].some(d=>i.cwd.startsWith(`${d}/`));process.stdout.write(`${i.access.padEnd(5)} ${i.cwd}${c?"":" (missing)"}
17
+ `)}return 0}return process.stderr.write(_),1}};export{xe as default};
@@ -1,8 +1,8 @@
1
- var to=Object.defineProperty;var u=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(n){throw r=[n],n}};var Ne=(e,t)=>{for(var r in t)to(e,r,{get:t[r],enumerable:!0})};function or(e){return ro.get(Number(e))||null}function ir(e,t=process.env){let r=or(e);if(!r)return null;for(let n of r.rpcEnv){let o=(t[n]||"").trim();if(o)return o}return null}var Ce,ro,tt=u(()=>{Ce={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}},ro=new Map(Object.values(Ce).map(e=>[e.chainId,e]))});function de(e){let t=e?.transactionHash||e?.hash||e?.txid||null;return t?{happened:!0,hash:String(t),note:null}:{happened:!1,hash:null,note:"no transaction hash \u2014 the action did not succeed"}}var rt=u(()=>{});var sr=u(()=>{});var ar=u(()=>{});var fe=u(()=>{});var ee=u(()=>{});var Re=u(()=>{fe();ee()});import{isAddress as ca}from"ethers";var ot=u(()=>{Re();fe();ee()});import{Interface as io,isAddress as ma}from"ethers";var ya,cr=u(()=>{ot();fe();ee();ya=new io(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as so,isAddress as xa}from"ethers";var Ia,ka,ur=u(()=>{ot();fe();ee();Ia=new so(["function approve(address spender,uint256 amount) returns (bool)"]),ka=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var K=u(()=>{});import{Interface as ao,MaxUint256 as La,isAddress as $a,keccak256 as Pa,toUtf8Bytes as Ba}from"ethers";var Ha,J=u(()=>{ar();cr();ur();K();ee();Ha=new ao(["function approve(address spender,uint256 amount) returns (bool)"])});var Ua,Wa,Le=u(()=>{Ua=300*1e3,Wa=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});var $e=u(()=>{J()});import{Address as Ya,NETWORK as Xa,OutScript as Za,RawTx as Qa,SigHash as ec,TEST_NETWORK as tc,Transaction as rc}from"@scure/btc-signer";var at=u(()=>{});import{createHash as co}from"node:crypto";import{base58 as sc}from"@scure/base";import{getCompiledTransactionMessageDecoder as cc}from"@solana/transaction-messages";var lr,uc,ct=u(()=>{lr=e=>co("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),uc=new Map([[lr("route"),{name:"route",prefixBytes:0}],[lr("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]])});import G from"node:net";import uo from"node:dns";function Pe(e){let t=String(e).toLowerCase().split("%")[0];if((t.match(/::/g)||[]).length>1)return null;let r=c=>{if(!c)return[];let d=c.split(":"),m=d.at(-1);if(m?.includes(".")){let p=m.split(".").map(Number);if(p.length!==4||p.some(h=>!Number.isInteger(h)||h<0||h>255))return null;d.splice(d.length-1,1,(p[0]<<8|p[1]).toString(16),(p[2]<<8|p[3]).toString(16))}return d.some(p=>!/^[0-9a-f]{1,4}$/.test(p))?null:d.map(p=>Number.parseInt(p,16))},[n,o]=t.split("::"),i=r(n),s=r(o);if(!i||!s)return null;let l=t.includes("::"),a=8-i.length-s.length;if(!l&&a!==0||l&&a<1)return null;let f=[...i,...Array(Math.max(0,a)).fill(0),...s];return f.length!==8?null:Uint8Array.from(f.flatMap(c=>[c>>8,c&255]))}function ut(e,t,r){let n=Math.floor(r/8),o=r%8;for(let s=0;s<n;s+=1)if(e[s]!==t[s])return!1;if(!o)return!0;let i=255<<8-o;return(e[n]&i)===(t[n]&i)}function lt(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=Pe(e);if(!t)return!1;let r=Pe("::ffff:0:0");return ut(t,r,96)?lt([...t.slice(12)].join(".")):ut(t,Pe("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([o,i])=>ut(t,Pe(o),i)):!1}return!1}function fo(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(lo.has(r)||r.endsWith(".localhost")||r.endsWith(".internal"))return{ok:!1,error:`refused internal host ${r}`};let n=G.isIP(r);return n!==0&&!lt(r)?{ok:!1,error:`refused private address ${r}`}:{ok:!0,url:t,host:r,isLiteralIp:n!==0}}async function dt(e,{lookupFn:t=uo.promises.lookup}={}){let r=fo(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 n;try{n=await t(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=>!lt(o.address))?{ok:!1,error:`refused: ${r.host} resolves to a non-public address`}:{ok:!0,url:r.url,addresses:n}}async function ft({requireUndici:e=!1,importUndici:t=()=>import("undici")}={}){let r,n;try{let d=await t();r=d.Agent,n=d.fetch}catch(d){if(e)throw new Error(`egress-guard: untrustedUrl pinning requires the undici package, which failed to load: ${d?.message||d}`);return null}if(typeof r!="function"||typeof n!="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 o=d=>String(d).toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,""),i=new Map,s=d=>(Array.isArray(d)?d:[d]).map(m=>typeof m=="string"?{address:m}:m).filter(m=>m&&m.address).map(m=>({address:m.address,family:m.family||(G.isIPv6(m.address)?6:4)})),l=(d,m,p)=>{i.set(o(d),s(typeof m=="string"?[{address:m,family:p}]:m))},a=d=>{let m=o(d);if(G.isIP(m))return[{address:m,family:G.isIPv6(m)?6:4}];let p=i.get(m);if(!p||!p.length)throw new Error(`refused: unpinned host ${d} during pinned fetch`);return p},f=new r({connect:{lookup(d,m,p){let h;try{h=a(d)}catch(w){return p(w)}return m?.all?p(null,h):p(null,h[0].address,h[0].family)}}}),c=po((d,m={})=>n(d,{...m,dispatcher:f}),l);return{dispatcher:f,fetch:c,pin:l,resolve:a,async close(){try{await f.destroy()}catch{}}}}function po(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[pt]=Object.freeze({pin:t}),e}function mt(e){return typeof e=="function"&&typeof e[pt]?.pin=="function"}function dr(e,t,r){if(!mt(e))throw new Error("pinFetchToAddresses: fetchImpl is not pin-capable");e[pt].pin(t,r)}var lo,pt,fr=u(()=>{lo=new Set(["localhost","metadata.google.internal","metadata.goog"]);pt=Symbol.for("oracle.egressGuard.pinCapableFetch")});import{createHash as mo}from"node:crypto";import{types as j}from"node:util";function A(e){return H(`HTTP JSON body refused: ${e}`)}function Ao(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 j[t]=="function"&&j[t](e))}function vo(e){let t=[],r=0,n=0,o=0,i=0,s=new WeakSet,l=c=>{if(r+=Buffer.byteLength(c,"utf8"),r>D.bytes)throw A("serialized byte limit exceeded");t.push(c)},a=c=>{if(Buffer.byteLength(c,"utf8")>D.bytes)throw A("serialized byte limit exceeded");return JSON.stringify(c)},f=(c,d)=>{if(n+=1,n>D.nodes)throw A("node limit exceeded");if(d>D.depth)throw A("depth limit exceeded");if(c===null){l("null");return}if(typeof c=="string"){l(a(c));return}if(typeof c=="boolean"){l(c?"true":"false");return}if(typeof c=="number"){if(!Number.isFinite(c))throw A("non-finite number");l(Object.is(c,-0)?"0":String(c));return}if(typeof c!="object")throw A("unsupported non-JSON value");if(j.isProxy(c))throw A("proxy value");if(Ao(c))throw A("unsupported exotic object");if(s.has(c))throw A("cyclic value");s.add(c);try{if(Object.getOwnPropertySymbols(c).length>0)throw A("symbol-keyed fields are unsupported");if(Array.isArray(c)){let h=Object.getPrototypeOf(c),w=0;for(;h!==null;){if(j.isProxy(h))throw A("proxy array prototype");if(w+=1,w>D.depth)throw A("array prototype depth limit exceeded");h=Object.getPrototypeOf(h)}if(c.length>D.arrayLength)throw A("array length limit exceeded");for(let v=0;v<c.length;v+=1){let $=Object.getOwnPropertyDescriptor(c,String(v));if(!$||!Object.hasOwn($,"value")||$.enumerable!==!0)throw A("array entries must be dense enumerable own data")}let y=0;for(let v in c){if(i+=1,i>D.fields)throw A("enumeration limit exceeded");if(Object.hasOwn(c,v)&&(y+=1,y>c.length))throw A("named array fields are unsupported")}if(y!==c.length)throw A("array entries must be dense enumerable own data");l("[");for(let v=0;v<c.length;v+=1)v&&l(","),f(Object.getOwnPropertyDescriptor(c,String(v)).value,d+1);l("]");return}let m=Object.getPrototypeOf(c);if(m!==Object.prototype&&m!==null)throw A("non-plain object");let p=[];for(let h in c){if(i+=1,i>D.fields)throw A("enumeration limit exceeded");if(!Object.hasOwn(c,h))continue;if(o+=1,o>D.fields)throw A("field limit exceeded");let w=Object.getOwnPropertyDescriptor(c,h);if(!w||!Object.hasOwn(w,"value")||w.enumerable!==!0)throw A("object fields must be enumerable own data");p.push([h,w.value])}l("{");for(let h=0;h<p.length;h+=1)h&&l(","),l(a(p[h][0])),l(":"),f(p[h][1],d+1);l("}")}finally{s.delete(c)}};return f(e,0),t.join("")}function Io(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(j.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 n of Object.keys(e)){if(!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/u.test(n))throw new TypeError("HTTP header names must be valid tokens");let o=n.toLowerCase();if(r.has(o))throw new TypeError("HTTP headers contain a duplicate canonical name");r.add(o);let i=Object.getOwnPropertyDescriptor(e,n);if(!i||!Object.hasOwn(i,"value"))throw new TypeError("HTTP headers must contain own data properties");let s=i.value;if(s==null||["object","function","symbol"].includes(typeof s))throw new TypeError("HTTP header values must be scalar");t[n]=String(s)}return t}function ko(){return Object.assign(Object.create(null),{Accept:"application/json"})}function Oo(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 To(e,t){return new URL(String(e)).origin===new URL(String(t)).origin}function Be(e){if((typeof e!="object"||e===null)&&typeof e!="function")return`${typeof e}:${String(e)}`;let t=gr.get(e);return t||(t=yr,yr+=1,gr.set(e,t)),`reference:${t}`}function br(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?No.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 Er(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(br);if(!r||typeof r!="object")return!1;if(Object.hasOwn(r,"jsonrpc")||Object.hasOwn(r,"method"))return br(r);let n=Object.hasOwn(r,"type")?r.type:null;return typeof n=="string"&&Co.has(n)&&(!Object.hasOwn(r,"action")||r.action==null)&&(!Object.hasOwn(r,"signature")||r.signature==null)&&(!Object.hasOwn(r,"nonce")||r.nonce==null)}function _o(e,t,r,n={},o=null){let i=mo("sha256"),s=(a,f)=>{let c=String(f);i.update(String(Buffer.byteLength(a,"utf8"))).update(":").update(a),i.update("=").update(String(Buffer.byteLength(c,"utf8"))).update(":").update(c).update(`
2
- `)};s("method",e),s("url",t),Object.keys(r||{}).map((a,f)=>({name:a.toLowerCase(),order:f,value:String(r[a])})).sort((a,f)=>a.name.localeCompare(f.name)||a.order-f.order).forEach((a,f)=>{s(`header-name-${f}`,a.name),s(`header-value-${f}`,a.value)}),s("body",o??"-");for(let a of["untrustedUrl","maxResponseBytes","sameOriginRedirectsOnly","redirectPolicy","maxRedirects","timeoutMs","retries","fetchImpl","realFetch","lookupFn","importUndici","validateResponse"])s(`context-${a}`,n[a]??"-");return i.digest("hex")}function Ro(e,t){let r=Number(t);return Number.isFinite(r)&&r>0?Math.min(r*1e3,mr):Math.min(250*2**e,mr)+Math.floor(Math.random()*100)}function H(e,t={}){let r=new Error(e);return r.retryable=!1,Object.assign(r,t),r}function ht(e,t,r){return H(`HTTP response from ${e} exceeded maxResponseBytes ${r} (${t})`,{oversize:!0})}function Y(e){try{let t=e?.body?.cancel?.();t&&typeof t.then=="function"&&t.catch(()=>{})}catch{}}function $o(e){return e?e.byteLength??e.length??0:0}async function Po(e,t,{url:r,truncate:n=!1,onOversize:o}={}){if(t==null)return await e.text();let i=Number(e.headers?.get?.("content-length"));if(Number.isFinite(i)&&i>t&&(Y(e),!n))throw ht(r,`content-length ${i}`,t);let s=e.body?.getReader?.();if(!s){let d=await e.text(),m=Buffer.byteLength(d,"utf8");if(m>t){if(!n)throw ht(r,`body ${m} bytes`,t);return Buffer.from(d,"utf8").subarray(0,t).toString("utf8")}return d}let l=[],a=0,f=!1;try{for(;;){let{value:d,done:m}=await s.read();if(m)break;if(d&&(l.push(Buffer.from(d)),a+=$o(d),a>t)){f=!0;break}}}finally{if(f)try{await s.cancel()}catch{}try{s.releaseLock?.()}catch{}}if(f&&(typeof o=="function"&&o(),!n))throw ht(r,`streamed ${a} bytes`,t);let c=Buffer.concat(l);return(f?c.subarray(0,t):c).toString("utf8")}function Bo(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}async function Do(e,{fetchImpl:t,method:r,headers:n,body:o,timeoutMs:i,lookupFn:s,realFetch:l,untrustedUrl:a=!1,maxResponseBytes:f=null,sameOriginRedirectsOnly:c=!1,importUndici:d,validateResponse:m,signal:p,redirectPolicy:h="follow",maxRedirects:w=De}){let y=null,v=t,$=s?{lookupFn:s}:{};if(a&&!l&&!mt(v))throw H(`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,P=setTimeout(()=>_.abort(),i),U=p?hr?hr([p,_.signal]):p:_.signal,ae=async(b,{status:k=null}={})=>{let O=await dt(b,$);if(!O.ok)throw H(k==null?`HTTP refused ${b}: ${O.error}`:`HTTP redirect to ${b} ${O.error}`,k==null?{}:{status:k});let M=new URL(b).hostname;if(l){if(y&&(await y.close(),y=null),!y)try{y=await ft({requireUndici:!0,...d?{importUndici:d}:{}})}catch(g){throw H(k==null?`HTTP refused ${b}: ${g?.message||g}`:`HTTP redirect to ${b} refused: ${g?.message||g}`,k==null?{}:{status:k})}y.pin(M,O.addresses),v=y.fetch}else dr(v,M,O.addresses);return O};try{let b=String(e),k=Object.assign(Object.create(null),n||{});a&&await ae(b);for(let O=0;O<=w;O+=1){let M=Object.assign(Object.create(null),{method:r,headers:k,body:o,signal:U,redirect:"manual",dispatcher:void 0}),g=await v(b,M);if((h==="error"||w===0)&&g.status>=300&&g.status<400)throw Y(g),H(`HTTP ${g.status} ${r} redirect refused`,{status:g.status,redirectRefused:!0});if(So.has(g.status)){let R=c===!0&&r==="POST"&&[307,308].includes(g.status)&&Er(r,o);if(r!=="GET"&&r!=="HEAD"&&!R){Y(g);let I=new Error(`HTTP ${g.status} ${r} ${b} redirected non-idempotent request`);throw I.status=g.status,I}if(O===w)throw Y(g),H(`HTTP ${g.status} ${r} redirect budget exhausted`,{status:g.status,redirectRefused:!0});let tr=g.headers?.get?.("location"),B;try{B=Oo(tr,b)}catch(I){throw Y(g),I}let W=!To(B,b);if(Y(g),W&&r==="POST"){let I=new Error(`HTTP ${g.status} ${r} cross-origin redirect refused`);throw I.status=g.status,I}if(W&&c){let I=new Error(`HTTP ${g.status} ${r} cross-origin redirect refused`);throw I.status=g.status,I.retryable=!1,I}if(W&&(k=ko(k)),a)await ae(B,{status:g.status});else if(W){let I=await dt(B,$);if(!I.ok){let S=new Error(`HTTP redirect from ${b} ${I.error}`);throw S.status=g.status,S.retryable=!1,S}l&&I.addresses?.length&&(y||(y=await ft(d?{importUndici:d}:{})),y&&(y.pin(new URL(B).hostname,I.addresses),v=y.fetch))}b=B;continue}if(typeof m=="function")try{await m(g,{url:b})}catch(R){throw Y(g),H(R?.message||String(R))}let T=await Po(g,f,{url:b,onOversize:()=>_.abort()}),ce=Bo(T);if(!g.ok){let R=new Error(`HTTP ${g.status} ${r} ${b}`);throw R.status=g.status,R.retryAfter=g.headers?.get?.("retry-after")??null,R.body=ce??T.slice(0,300),R}return ce??T}throw new Error(`HTTP redirect loop for ${e}`)}catch(b){if(_.signal.aborted&&!me(p)){let k=b&&(typeof b=="object"||typeof b=="function")&&!j.isProxy(b)?b:null,O=k?Object.getOwnPropertyDescriptor(k,"oversize"):null;if(!(O&&Object.hasOwn(O,"value")&&O.value===!0))try{if(!k)throw new TypeError("unsafe rejection");Object.defineProperties(k,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}})}catch{let g=new Error("HTTP request timed out");throw Object.defineProperties(g,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}}),g}}throw b}finally{clearTimeout(P),y&&await y.close()}}async function je(e,t={}){if(t!=null&&typeof t!="object"&&typeof t!="function")throw new TypeError("HTTP options must be an object");if(t!=null&&j.isProxy(t))throw new TypeError("HTTP options must not be a proxy");let r=new Set(["body","dedupe","fetchImpl","headers","importUndici","lookupFn","maxRedirects","maxResponseBytes","method","redirectPolicy","retries","sameOriginRedirectsOnly","signal","timeoutMs","untrustedUrl","validateResponse"]);if(t!=null){if(Object.getOwnPropertySymbols(t).length>0)throw new TypeError("HTTP options contain unknown fields");for(let S of Object.getOwnPropertyNames(t)){let E=Object.getOwnPropertyDescriptor(t,S);if(!(S==="toJSON"&&E&&Object.hasOwn(E,"value")&&E.value===void 0)){if(!r.has(S))throw new TypeError("HTTP options contain unknown fields");if(!E||!E.enumerable||!Object.hasOwn(E,"value"))throw new TypeError("HTTP options must contain enumerable own data properties")}}}let n=S=>{if(t==null||!Object.hasOwn(t,S))return;let E=Object.getOwnPropertyDescriptor(t,S);if(!E||!Object.hasOwn(E,"value"))throw new TypeError("HTTP options must contain own data properties");return E.value};if(typeof e!="string"||e.length===0||e.length>8192)throw new TypeError("HTTP URL must be a bounded string");let o=n("method");if(o!==void 0&&(typeof o!="string"||!/^[A-Za-z]+$/u.test(o)))throw new TypeError("HTTP method must be a string token");let i=n("timeoutMs");if(i!==void 0&&(!Number.isInteger(i)||i<1||i>12e4))throw new TypeError("HTTP timeoutMs must be a bounded integer");let s=n("retries");if(s!==void 0&&(!Number.isInteger(s)||s<0||s>10))throw new TypeError("HTTP retries must be a bounded integer");let l=n("redirectPolicy");if(l!==void 0&&l!=="follow"&&l!=="error")throw new TypeError('HTTP redirectPolicy must be "follow" or "error"');let a=n("maxRedirects");if(a!==void 0&&(!Number.isInteger(a)||a<0||a>De))throw new TypeError(`HTTP maxRedirects must be an integer from 0 through ${De}`);if(l==="error"&&a!==void 0&&a!==0)throw new TypeError('HTTP redirectPolicy "error" requires maxRedirects 0 when supplied');let f=l??"follow",c=f==="error"?0:a??De;for(let S of["dedupe","untrustedUrl","sameOriginRedirectsOnly"]){let E=n(S);if(E!==void 0&&typeof E!="boolean")throw new TypeError(`HTTP ${S} must be boolean`)}let d=n("maxResponseBytes");if(d!==void 0&&(!Number.isInteger(d)||d<1||d>64*1024*1024))throw new TypeError("HTTP maxResponseBytes must be a bounded integer");let m=n("signal");if(m!==void 0){if(j.isProxy(m)||!(m instanceof AbortSignal))throw new TypeError("HTTP signal must be a native AbortSignal");try{me(m)}catch{throw new TypeError("HTTP signal must be a native AbortSignal")}}for(let S of["importUndici","lookupFn","validateResponse"]){let E=n(S);if(E!==void 0&&typeof E!="function")throw new TypeError(`HTTP ${S} must be a function`)}let p=n("fetchImpl"),h=p||globalThis.fetch;if(typeof h!="function")throw new Error("fetch unavailable \u2014 pass opts.fetchImpl");let w=i??12e3,y=(o||"GET").toUpperCase(),v=n("headers"),$=Io(v),_=Object.assign(Object.create(null),$);Object.keys(_).some(S=>S.toLowerCase()==="accept")||(_.Accept="application/json");let P=n("body");P!=null&&typeof P!="string"&&(Object.keys(_).find(E=>E.toLowerCase()==="content-type")||(_["Content-Type"]="application/json"),P=vo(P));let U=s??ho,ae=n("lookupFn"),b=!p,k=n("untrustedUrl")===!0,O=n("sameOriginRedirectsOnly")===!0,M=n("importUndici"),g=n("validateResponse"),T=m,ce=d??null,R=async()=>{let S;for(let E=0;E<=U;E++){T&&bo.call(T);try{return await Do(e,{fetchImpl:h,method:y,headers:_,body:P,timeoutMs:w,lookupFn:ae,realFetch:b,untrustedUrl:k,maxResponseBytes:ce,sameOriginRedirectsOnly:O,importUndici:M,validateResponse:g,signal:T,redirectPolicy:f,maxRedirects:c})}catch(V){S=V;let Q=et=>{if(!V||typeof V!="object"&&typeof V!="function"||j.isProxy(V))return;let ue=Object.getOwnPropertyDescriptor(V,et);return ue&&Object.hasOwn(ue,"value")?ue.value:void 0},Qe=Q("status"),Zn=Q("oracleTimeout")===!0||Q("name")==="AbortError"||Q("name")==="TimeoutError"||me(T),Qn=new Set([408,425,429]),eo=Q("retryable")===!1?!1:Qe!=null?Qn.has(Qe)||wo.has(Qe)&&pr.has(y):!Zn&&pr.has(y);if(E===U||!eo)throw V;let rr=Ro(E,Q("retryAfter"));T?await new Promise((et,ue)=>{let nr,le=()=>{clearTimeout(nr),wr.call(T,"abort",le),ue(xo(T)||new DOMException("Aborted","AbortError"))};if(me(T)){le();return}nr=setTimeout(()=>{wr.call(T,"abort",le),et()},rr),Eo.call(T,"abort",le,{once:!0}),me(T)&&le()}):await Lo(rr)}}throw S};if(!(n("dedupe")!==!1&&!T&&Er(y,P)))return R();let B=_o(y,e,_,{untrustedUrl:k,maxResponseBytes:ce,sameOriginRedirectsOnly:O,redirectPolicy:f,maxRedirects:c,timeoutMs:w,retries:U,fetchImpl:Be(h),realFetch:b,lookupFn:Be(ae),importUndici:Be(M),validateResponse:Be(g)},P),W=wt.get(B);if(W)return W;let I=R().finally(()=>wt.delete(B));return wt.set(B,I),I}var wo,pr,ho,mr,go,yo,bo,Eo,wr,hr,me,xo,So,De,gc,D,wt,gr,yr,No,Co,Lo,Fe=u(()=>{fr();wo=new Set([408,425,429,500,502,503,504]),pr=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),ho=2,mr=4e3,go=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"aborted")?.get,yo=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"reason")?.get,bo=AbortSignal.prototype.throwIfAborted,Eo=EventTarget.prototype.addEventListener,wr=EventTarget.prototype.removeEventListener,hr=typeof AbortSignal.any=="function"?AbortSignal.any.bind(AbortSignal):null,me=e=>e?go.call(e):!1,xo=e=>e?yo.call(e):void 0,So=new Set([301,302,303,307,308]),De=3,gc=64*1024,D=Object.freeze({depth:32,nodes:1e4,fields:1e4,arrayLength:1e4,bytes:1024*1024});wt=new Map,gr=new WeakMap,yr=1;No=new Set(["eth_blockNumber","eth_call","eth_chainId","eth_estimateGas","getHealth","minimumLedgerSlot","net_version","simulateTransaction","web3_clientVersion"]),Co=new Set(["allMids","l2Book","outcomeMeta","spotClearinghouseState","userFills","meta","metaAndAssetCtxs","perpDexs","candleSnapshot","fundingHistory","openOrders","frontendOpenOrders","clearinghouseState","spotMeta","validatorSummaries","delegatorSummary","delegations","delegatorRewards","delegatorHistory","maxBuilderFee"]);Lo=e=>new Promise(t=>setTimeout(t,e))});var xr=u(()=>{});var Sr=u(()=>{Fe();xr()});var Oc,Ar=u(()=>{Sr();Oc=Object.freeze({tradexyz:"xyz",ventuals:"vntl",hypernova:"hyna",paradex:"para",entropy:"io",entropyio:"io"})});var Rc,Lc,yt=u(()=>{K();Ar();Rc=Object.freeze({"perp-order":"order","hip3-order":"order","hip4-order":"order","perp-bracket":"order","perp-cancel":"cancel","perp-leverage":"leverage","perp-isolated-margin":"margin","builder-fee-approval":"approveBuilder","hype-stake-deposit":"stake","hype-stake-withdraw":"unstake","hype-delegate":"delegate","hype-undelegate":"delegate"}),Lc=Object.freeze({"perp-order":"order","hip3-order":"order","hip4-order":"order","perp-bracket":"order","perp-cancel":"cancel","perp-leverage":"updateLeverage","perp-isolated-margin":"updateIsolatedMargin","builder-fee-approval":"approveBuilderFee","hype-stake-deposit":"cDeposit","hype-stake-withdraw":"cWithdraw","hype-delegate":"tokenDelegate","hype-undelegate":"tokenDelegate"})});var Bc,bt=u(()=>{K();Bc="0x"+"00".repeat(32)});var jo,Mc,Et=u(()=>{bt();K();jo=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),Mc=Object.freeze(jo.map(e=>e[0]))});var qe=u(()=>{K()});import{TypedDataEncoder as Vc,getAddress as Kc,isAddress as Jc}from"ethers";var qo,Mo,Or=u(()=>{Le();qo=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),Mo=Object.freeze({Order:[{name:"salt",type:"uint256"},{name:"maker",type:"address"},{name:"receiver",type:"address"},{name:"makerAsset",type:"address"},{name:"takerAsset",type:"address"},{name:"makingAmount",type:"uint256"},{name:"takingAmount",type:"uint256"},{name:"makerTraits",type:"uint256"}]})});var Xc,Tr=u(()=>{Xc=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"})});var Nr=u(()=>{});import{TypedDataEncoder as iu,getAddress as su,isAddress as au}from"ethers";var Ho,mu,zo,wu,Cr=u(()=>{Fe();Re();Tr();Nr();Le();Ho=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),mu=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"}),zo=Object.freeze({Order:[{name:"sellToken",type:"address"},{name:"buyToken",type:"address"},{name:"receiver",type:"address"},{name:"sellAmount",type:"uint256"},{name:"buyAmount",type:"uint256"},{name:"validTo",type:"uint32"},{name:"appData",type:"bytes32"},{name:"feeAmount",type:"uint256"},{name:"kind",type:"string"},{name:"partiallyFillable",type:"bool"},{name:"sellTokenBalance",type:"string"},{name:"buyTokenBalance",type:"string"}]}),wu=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]})});import{TypedDataEncoder as yu,getAddress as bu}from"ethers";var Su,xt=u(()=>{Or();Cr();Su=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"])});import{Interface as Rr}from"ethers";var Go,Fu,Yo,qu,Mu,Hu,zu,Xo,Uu,Me=u(()=>{J();Re();Le();$e();at();ct();yt();Et();qe();xt();Go=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]),Fu=Object.freeze({swap:5,bridge:5,perps:0,nft:0,mint:0,transfer:0,approve:0,delegate:0,identity:0,order:0,cancel:0,leverage:0,margin:0,approveBuilder:0,stake:0,unstake:0}),Yo=Object.freeze({"0x04e45aaf":{provider:"uniswap-v3",action:"swap",layout:"router02-exact-input-single"},"0x414bf389":{provider:"uniswap-v3",action:"swap",layout:"swap-router-exact-input-single"},"0xc04b8d59":{provider:"uniswap-v3",action:"swap",layout:"exact-input-deadline"},"0xb858183f":{provider:"uniswap-v3",action:"swap",layout:"exact-input"},"0x5ae401dc":{provider:"uniswap-v3",action:"swap",layout:"multicall-deadline"},"0xa026383e":{provider:"aerodrome",action:"swap",layout:"aerodrome-exact-input-single"},"0x7b939232":{provider:"across-v3",action:"bridge",layout:"across-deposit-v3"}}),qu=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),Mu=new Rr(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Hu=new Rr(["function mintAllowList(address nftContract,address feeRecipient,address minterIfNotPayer,uint256 quantity,(uint80 mintPrice,uint48 maxTotalMintableByWallet,uint48 startTime,uint48 endTime,uint48 dropStageIndex,uint32 maxTokenSupplyForStage,uint16 feeBps,bool restrictFeeRecipients) mintParams,bytes32[] proof) payable"]),zu=Object.freeze({"0xa0712d68":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0x1249c58b":{provider:"nft-mint",action:"mint",layout:"mint-no-args"},"0x2db11544":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0xefef39a1":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0xa6f2ae3a":{provider:"nft-mint",action:"mint",layout:"mint-no-args"}}),Xo=Object.freeze([...Go]),Uu=Object.freeze({...Yo})});import{encode as Ku}from"@msgpack/msgpack";import{keccak256 as Gu,verifyTypedData as Yu}from"ethers";var Xu,Zu,St=u(()=>{Xu=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Zu=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var At=u(()=>{qe()});import{ed25519 as sl}from"@noble/curves/ed25519.js";import{base58 as cl}from"@scure/base";import{RawTx as ll,SigHash as dl,Transaction as fl}from"@scure/btc-signer";import{Transaction as ml,keccak256 as wl,verifyTypedData as hl}from"ethers";var vt=u(()=>{St();At()});import{base58 as Al}from"@scure/base";var we=u(()=>{Me();$e();J();vt()});var Lr=u(()=>{we();Me()});import{wordlists as ei}from"ethers";function oi(e){let t=String(e).trim().toLowerCase().split(/\s+/).filter(Boolean);return ni.has(t.length)&&t.every(r=>ei.en.getWordIndex(r)>=0)}function ci(e){let t=$r(e);return ai.has(t)||si.test(t)}function $r(e){return String(e).replace(/[^a-z0-9]/gi,"").toLowerCase()}function ui(e){let t=$r(e);return[...ti].some(r=>t.includes(r))}function li(e,t,r){if(typeof t=="string"){if(ri.some(n=>n.test(t))||oi(t))throw new he(r);if(ii.test(t)&&!ci(e))throw new he(r)}}function kt(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string")return li(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((o,i)=>kt(o,`${t}[${i}]`,r));if(typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`action receipt: JSON-like value required at ${t}`);let n={};for(let o of Object.keys(e).sort()){let i=`${t}.${o}`;if(ui(o))throw new he(i);e[o]!==void 0&&(n[o]=kt(e[o],i,o))}return n}function He(e){return kt(e)}var ti,ri,ni,ii,si,ai,he,ge=u(()=>{ti=new Set(["privatekey","privkey","secretkey","seedphrase","seed","mnemonic","passphrase","password","keystore","keymaterial","wif","xprv","xpriv","bearer","authorization","signature","apikey","credential"]),ri=[/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/,/\bxprv[0-9A-Za-z]{50,}\b/],ni=new Set([12,15,18,21,24]);ii=/^\s*(?:0x)?[0-9a-fA-F]{64}\s*$/,si=/(hash|digest|root|salt|nonce|proof|commitment|sig|id)(?:e?s)?$/i,ai=new Set(["calldata","data","publickey","pubkey","message","payload","input","extradata"]);he=class extends Error{constructor(t){super(`action receipt refused: secret-bearing field at ${t}`),this.name="ActionReceiptSecretError",this.code="ACTION_RECEIPT_SECRET"}}});import{closeSync as jl,constants as di,fchmodSync as Fl,fsyncSync as ql,lstatSync as Ml,mkdirSync as Hl,openSync as zl,readFileSync as Ul,renameSync as Wl,rmSync as Vl,writeFileSync as Kl}from"node:fs";var Yl,Pr=u(()=>{ge();we();Yl=di.O_NOFOLLOW??0});import{wordlists as Ql}from"ethers";var Br,td,te=u(()=>{ge();Br=64*1024,td=32*1024});var mi,od,id,Ue=u(()=>{te();mi=["schemaVersion","buildVersion","recordType","execution","custody"],od=[...mi,"recordHash"],id=Object.freeze({signed:new Set(["workflow.signed","legacy.signed"]),submitted:new Set(["workflow.submitted","legacy.broadcast"]),finalized:new Set(["workflow.finalized"]),reorged:new Set(["workflow.reorged"]),orphaned:new Set(["workflow.orphaned"]),compensating:new Set(["workflow.compensating"]),compensated:new Set(["workflow.compensated"])})});var wi,Wr,ld,_t=u(()=>{te();Ue();wi=Object.freeze(["draft","checked","approval","signed","submitted","finalized","reorged","orphaned","compensating","compensated","failed","cancelled"]),Wr=Object.freeze(["workflow.drafted","workflow.checked","workflow.approval_requested","workflow.approval_granted","workflow.signed","workflow.submitted","workflow.finalized","workflow.reorged","workflow.orphaned","workflow.compensating","workflow.compensated","workflow.failed","workflow.cancelled","workflow.annotated"]),ld=new Set(Wr)});var xi,Vr=u(()=>{te();_t();xi=64*1024*1024});var gd,yd,bd,Kr=u(()=>{gd=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),yd=Object.freeze(["read","simulate"]),bd=1440*60});function Rt(e){let t=String(e),r=t.toLowerCase().replace(/[\s._-]+/g,"");return Si.test(t)||Ai.includes(r)}function vi(e){return e.replace(/"([A-Za-z0-9_-]+)"\s*:\s*"(?:0x)?([0-9a-fA-F]{64})"/g,(t,r)=>Gr.includes(String(r).toLowerCase().replace(/[_-]/g,""))?`"${r}":"<hex64>"`:t)}function Yr(e){let t;try{t=JSON.stringify(e)}catch(o){throw new F("$",`unserializable-payload: ${String(o?.message||o)}`)}if(t===void 0)return"null";let r=vi(t);for(let{rule:o,re:i}of Jr)if(i.test(r))throw new F("$<serialized>",o);if(/(?:^|[^0-9a-fA-Fx])0x[0-9a-fA-F]{64}(?![0-9a-fA-F])/.test(r))throw new F("$<serialized>","raw-32-byte-hex-embedded");return JSON.parse(t,(o,i)=>{if(o&&Rt(o))throw new F(`$<serialized>.${o}`,"forbidden-key-name");return i}),t}function z(e,t="$",r=new Set,n=""){if(e==null)return e;if(typeof e=="string"){let o=Gr.includes(String(n).toLowerCase().replace(/[_-]/g,""));for(let{rule:i,re:s}of Jr)if(!(o&&i.startsWith("raw-32-byte-hex"))&&s.test(e))throw new F(t,i);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[o,i]of e.entries()){if(typeof o=="string"&&Rt(o))throw new F(`${t}[${JSON.stringify(o)}]`,"forbidden-key-name");z(o,`${t}[key]`,r),z(i,`${t}[${String(o)}]`,r)}return e}if(e instanceof Set){let o=0;for(let i of e.values())z(i,`${t}[${o++}]`,r);return e}if(Array.isArray(e))return e.forEach((o,i)=>z(o,`${t}[${i}]`,r)),e;for(let[o,i]of Object.entries(e)){if(Rt(o))throw new F(`${t}.${o}`,"forbidden-key-name");z(i,`${t}.${o}`,r,o)}return e}var F,Si,Ai,Jr,Gr,Lt=u(()=>{Kr();F=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}},Si=/(private[_-]?key|secret|bearer|keystore|mnemonic|seed[_-]?phrase|passphrase|password|api[_-]?key|access[_-]?token|auth[_-]?token|session[_-]?token|signer[_-]?url|signature)/i,Ai=Object.freeze(["privkey","wif","xprv","seed"]);Jr=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}]),Gr=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"])});var $t,Cd,Xr=u(()=>{Lt();$t=Object.freeze(["intent","quote_comparison","simulation","prepared","approval","signed","broadcast","settlement","balance_delta","position"]),Cd=Object.freeze(Object.fromEntries($t.map((e,t)=>[e,Object.freeze(t+1<$t.length?[$t[t+1]]:[])])))});var Ii,Zr=u(()=>{Xr();te();Ue();Ii=Object.freeze({intent:"draft",quote_comparison:"draft",simulation:"draft",prepared:"checked",approval:"approval",signed:"signed",broadcast:"submitted",settlement:"finalized",balance_delta:"compensated",position:"compensated"})});var Qr=u(()=>{te();Ue();_t();Vr();Zr()});var Oi,Ti,Ni,wf,hf,gf,yf,bf,Ci,Ef,en=u(()=>{Oi=Object.freeze(["owner","operator","agent","viewer"]),Ti=Object.freeze(["tenant","config","policy","grant","workflow","trade","receipt","audit","telemetry","context","lifecycle"]),Ni=Object.freeze({read:"read",create:"create",update:"update",delete:"delete",manage:"manage",prepare:"prepare",cancel:"cancel",export:"export",approve:"approve"}),wf=Object.freeze(["owner"]),hf=Object.freeze({ALLOW_ROLE_PERMISSION:"allow.role_permission",DENY_MISSING_CONTEXT:"deny.missing_context",DENY_INVALID_CONTEXT:"deny.invalid_context",DENY_INVALID_REQUEST:"deny.invalid_request",DENY_UNKNOWN_RESOURCE:"deny.unknown_resource",DENY_UNKNOWN_ACTION:"deny.unknown_action",DENY_UNBOUND_OBJECT:"deny.unbound_object",DENY_TENANT_MISMATCH:"deny.tenant_mismatch",DENY_RESOURCE_MISMATCH:"deny.resource_mismatch",DENY_ROLE_PERMISSION:"deny.role_permission",DENY_POLICY_NOT_APPROVER:"deny.policy_not_approver"}),gf=new Set(Oi),yf=new Set(Ti),bf=new Set(Object.values(Ni)),Ci=Object.freeze({owner:Object.freeze(["tenant:read","tenant:manage","config:read","config:manage","policy:read","policy:manage","grant:read","grant:create","grant:update","grant:delete","grant:manage","workflow:read","workflow:create","workflow:update","workflow:delete","workflow:cancel","workflow:approve","trade:read","trade:prepare","receipt:read","receipt:export","audit:read","audit:export","telemetry:read","telemetry:create","telemetry:export","context:read","context:create","context:update","context:delete","context:manage","context:export","lifecycle:read","lifecycle:create","lifecycle:update","lifecycle:delete","lifecycle:manage","lifecycle:approve","lifecycle:export"]),operator:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","workflow:cancel","trade:read","trade:prepare","receipt:read","audit:read","telemetry:read","telemetry:create","context:read","context:create","context:update","context:delete","lifecycle:read","lifecycle:create","lifecycle:update","lifecycle:manage"]),agent:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","trade:read","trade:prepare","receipt:read","telemetry:create","context:read","context:create","context:update","lifecycle:read"]),viewer:Object.freeze(["tenant:read","config:read","grant:read","workflow:read","trade:read","receipt:read","audit:read","telemetry:read","context:read","lifecycle:read"])}),Ef=Object.freeze(Object.fromEntries(Object.entries(Ci).map(([e,t])=>[e,Object.freeze([...t])])))});var _i,Ri,Li,vf,If,kf,Of,Tf,Nf,Pt=u(()=>{en();_i=Object.freeze(["succeeded","denied","invalid","failed","cancelled","timed_out","unavailable","skipped"]),Ri=Object.freeze(["workflow","task","intent","plan","run","event","eval"]),Li=Object.freeze(["taskId","intentId","planId","runId","eventId"]),vf=Object.freeze({maxAttributes:24,maxKeyLength:48,maxStringLength:256,maxArrayLength:8}),If=new Set(_i),kf=new Set(Ri),Of=new Set(Li),Tf=Object.freeze(["authorization","bearer","cookie","credential","password","passphrase","secret","token","privatekey","privkey","seed","mnemonic","keystore","signature","prompt","systemmessage","usermessage","assistantmessage","rawtransaction","signedtransaction","serializedtransaction","transactionbytes","calldata","callbytes","inputdata"]),Nf=Object.freeze({taskId:"x-oracle-task-id",intentId:"x-oracle-intent-id",planId:"x-oracle-plan-id",runId:"x-oracle-run-id",eventId:"x-oracle-event-id"})});var Pf,tn=u(()=>{Qr();Pt();Pf=Object.freeze({"workflow.cancelled":"cancelled","workflow.failed":"failed"})});var Mf,rn=u(()=>{Pt();Mf=32*1024*1024});var zf,Uf,Wf,re=u(()=>{zf=Object.freeze({N:1<<17,r:8,p:1}),Uf=256*1024*1024,Wf=16*1024});var Kf,nn=u(()=>{Kf=Object.freeze({1:{name:"ethereum",mode:"mempool-private",endpoints:["https://rpc.flashbots.net/fast","https://rpc.mevblocker.io"]},8453:{name:"base",mode:"sequencer",endpoints:["https://mainnet-sequencer.base.org"]},10:{name:"optimism",mode:"sequencer",endpoints:["https://mainnet-sequencer.optimism.io"]},42161:{name:"arbitrum",mode:"sequencer",endpoints:["https://arb1-sequencer.arbitrum.io/rpc"]},56:{name:"bsc",mode:"mempool-private",endpoints:["https://rpc.48.club","https://bsc.rpc.blxrbdn.com"]},137:{name:"polygon",mode:"mempool-private",endpoints:["https://polygon-bor-rpc.publicnode.com"]},43114:{name:"avalanche",mode:"public-only",endpoints:[]},999:{name:"hyperevm",mode:"public-only",endpoints:[]}})});import{homedir as Bt}from"node:os";import{join as Dt}from"node:path";var on,$i,Xf,sn=u(()=>{on=process.env.ORACLE_PUBLIC_DESKTOP==="1",$i=on?process.env.ORACLE_CONFIG_DIR||Dt(Bt(),".config","oracle"):Dt(Bt(),".config","oracle"),Xf=on?$i:Dt(Bt(),".config","mad-desk")});var rp,np,op,an=u(()=>{sn();rp="0".repeat(64),np=Object.freeze({PREPARE:"exec.prepare",SIGN:"exec.sign",BROADCAST:"exec.broadcast",POLICY_REJECT:"policy.reject",AUTH_GRANT:"auth.grant",AUTH_OK:"auth.verify.ok",AUTH_FAIL:"auth.verify.fail"}),op=Promise.resolve()});var jt=u(()=>{an();K();re();we()});var un=u(()=>{});var fn={};Ne(fn,{SIGN_TIME_REVIEW_VERSION:()=>Pi,SignTimeReviewSecretError:()=>ye,createSignTimeReview:()=>dn});function Ft(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string"){let o=e.trim().split(/\s+/);if(qi.test(e)||Mi.has(o.length)&&o.every(i=>/^[a-z]+$/i.test(i)))throw new ye(t);return e}if(typeof e=="bigint")return e.toString();if(typeof e=="number"){if(!Number.isSafeInteger(e))throw new TypeError(`sign-time review: safe integer required at ${t}`);return e}if(Array.isArray(e))return e.map((o,i)=>Ft(o,`${t}[${i}]`,r));X(e,t);let n={};for(let o of Object.keys(e).sort()){let i=o.replace(/[^a-z0-9]/gi,"");if(Fi.test(i))throw new ye(`${t}.${o}`);e[o]!==void 0&&(n[o]=Ft(e[o],`${t}.${o}`,o))}return n}function X(e,t){if(e==null||typeof e!="object"||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`sign-time review: ${t} must be a plain object`);return e}function be(e,t){if(e==null||e==="")throw new TypeError(`sign-time review: ${t} required`);return e}function ne(e,t){let r=String(be(e,t)).toLowerCase();if(!Bi.test(r))throw new TypeError(`sign-time review: ${t} must be an EVM address`);return r}function q(e,t,{positive:r=!1}={}){try{let n=BigInt(be(e,t));if(n<0n||r&&n===0n)throw new Error;return n.toString()}catch{throw new TypeError(`sign-time review: ${t} must be an unsigned integer`)}}function qt(e,t){if(typeof e!="string"||e.length===0||e.length>500||e!==e.trim())throw new TypeError(`sign-time review: ${t} must be non-empty text`);return e}function ln(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))ln(t);Object.freeze(e)}return e}function Hi(e,t){if(typeof e=="boolean")return{passed:e,reason:e?"passed":"failed"};X(e,t);let r=e.passed??e.ok??e.allowed;if(typeof r!="boolean")throw new TypeError(`sign-time review: ${t} needs a boolean result`);let n=e.reason??e.message??e.name??(r?"passed":"failed");return{...e,passed:r,reason:qt(String(n),`${t}.reason`)}}function zi(e){if(!Array.isArray(e))throw new TypeError("sign-time review: policyChecks must be an array");let t=e.map((n,o)=>Hi(n,`policyChecks[${o}]`)),r=t.filter(n=>!n.passed);return{checks:t,passed:t.length-r.length,failed:r.length,reasons:r.map(n=>n.reason)}}function Ui(e){if(e==null)return null;if(X(e,"simulation"),typeof e.status!="string"||!["ok","success","failed","error","unavailable","unknown"].includes(e.status))throw new TypeError("sign-time review: simulation.status is invalid");if(e.willRevert!==!0&&e.willRevert!==!1&&e.willRevert!==null)throw new TypeError("sign-time review: simulation.willRevert must be boolean or null");let t={status:e.status,willRevert:e.willRevert??null,summary:qt(String(e.summary??"simulation result recorded"),"simulation.summary")};return e.gasEstimate!=null&&(t.gasEstimate=q(e.gasEstimate,"simulation.gasEstimate")),e.gasLimit!=null&&(t.gasLimit=q(e.gasLimit,"simulation.gasLimit")),t}function Wi(e){if(e==null)return null;if(!Array.isArray(e)||e.length===0)throw new TypeError("sign-time review: assetDeltas must be a non-empty array");return e.map((t,r)=>{X(t,`assetDeltas[${r}]`);let n=q(t.before,`assetDeltas[${r}].before`),o=q(t.after,`assetDeltas[${r}].after`),i=(BigInt(o)-BigInt(n)).toString(),s;try{s=t.delta==null?i:BigInt(t.delta).toString()}catch{throw new TypeError(`sign-time review: assetDeltas[${r}].delta must be an integer`)}if(s!==i)throw new TypeError(`sign-time review: assetDeltas[${r}].delta does not match before/after`);return{...t,asset:qt(String(be(t.asset??t.token,`assetDeltas[${r}].asset`)),`assetDeltas[${r}].asset`),before:n,after:o,delta:s}})}function Vi(e){if(e==null)return[];if(!Array.isArray(e))throw new TypeError("sign-time review: approvalDeltas must be an array");return e.map((t,r)=>{X(t,`approvalDeltas[${r}]`);let n=q(t.amount??t.after,`approvalDeltas[${r}].amount`);if(t.revokeLike!=null&&typeof t.revokeLike!="boolean")throw new TypeError(`sign-time review: approvalDeltas[${r}].revokeLike must be boolean`);return{token:ne(t.token,`approvalDeltas[${r}].token`),spender:ne(t.spender,`approvalDeltas[${r}].spender`),owner:ne(t.owner,`approvalDeltas[${r}].owner`),amount:n,revokeLike:t.revokeLike??BigInt(n)===0n}})}function dn(e={}){X(e,"input");let t=Ft(e),r=t.tx==null?t:X(t.tx,"tx"),n=q(t.chainId??r.chainId,"chainId",{positive:!0}),o=ne(t.account??t.from??r.from,"account/from"),i=ne(t.destination??t.to??r.to,"destination/to"),s=String(be(t.prepareHash,"prepareHash")).toLowerCase();if(!ji.test(s))throw new TypeError("sign-time review: prepareHash must be a 32-byte hash");let l=t.route??t.venue;if(l==null)throw new TypeError("sign-time review: route/venue required");let a=t.decodedCalldata??t.decodedAction;if(a==null)throw new TypeError("sign-time review: decodedCalldata or decodedAction required");let f=String(be(t.calldata??t.data??r.data,"calldata/data")).toLowerCase();if(!Di.test(f))throw new TypeError("sign-time review: calldata/data must be even-length hex");let c=t.policyChecks!==void 0&&t.policyChecks!==null,d=zi(c?t.policyChecks:[]),m=Ui(t.simulation),p=Wi(t.assetDeltas),h=Vi(t.approvalDeltas),w=t.allowlistHits??[];if(!Array.isArray(w))throw new TypeError("sign-time review: allowlistHits must be an array");let y=m?.willRevert===!0||["failed","error"].includes(m?.status),v=m!=null&&m.willRevert===!1&&["ok","success"].includes(m.status),$=y||d.failed>0?"BLOCKED":v&&c&&d.checks.length>0&&p!=null?"READY":"UNKNOWN",_=typeof a=="string"?a:a.method??a.action??a.type??"transaction",P=`${$}: review ${_} on chain ${n}; policy ${d.passed} passed, ${d.failed} failed; ${p?.length??0} asset delta${p?.length===1?"":"s"}; local signature required`,U={reviewVersion:1,status:$,requiresLocalSignature:!0,signingLocal:!0,custody:"none",execution:"review-only",chainId:n,account:o,from:o,route:l,venue:t.venue??(typeof l=="string"?l:l.venue??l.provider??null),destination:i,to:i,...t.spender==null?{}:{spender:ne(t.spender,"spender")},prepareHash:s,...t.decodedCalldata!==void 0?{decodedCalldata:t.decodedCalldata}:{decodedAction:t.decodedAction},calldata:f,data:f,selector:f.length>=10?f.slice(0,10):null,value:q(t.value??r.value??0,"value"),...(t.gasEstimate??r.gasEstimate)==null?{}:{gasEstimate:q(t.gasEstimate??r.gasEstimate,"gasEstimate")},...(t.gasLimit??r.gasLimit)==null?{}:{gasLimit:q(t.gasLimit??r.gasLimit,"gasLimit")},simulation:m,policyChecks:d,allowlistHits:w,assetDeltas:p,approvalDeltas:h,summary:P};return ln(U)}var Pi,Bi,Di,ji,Fi,qi,Mi,ye,Mt=u(()=>{Pi=1,Bi=/^0x[0-9a-f]{40}$/,Di=/^0x(?:[0-9a-f]{2})*$/,ji=/^(?:0x)?[0-9a-f]{64}$/,Fi=/(privatekey|privkey|secretkey|seedphrase|mnemonic|passphrase|password|keystore|keymaterial|wif|xprv|xpriv|bearer|authorization|signature|apikey|credential)/i,qi=/\b(?:[5KL][1-9A-HJ-NP-Za-km-z]{50,51}|xprv[0-9A-Za-z]{50,})\b/,Mi=new Set([12,15,18,21,24]),ye=class extends Error{constructor(t){super(`sign-time review refused: secret-bearing field at ${t}`),this.name="SignTimeReviewSecretError",this.code="SIGN_TIME_REVIEW_SECRET"}}});import{readFileSync as mp,readdirSync as wp,existsSync as Ki}from"node:fs";import{dirname as Ji,join as Ee}from"node:path";import{fileURLToPath as Gi}from"node:url";function Yi(){let e=[Ee(xe,"descriptors"),Ee(xe,"clear-sign","descriptors"),Ee(xe,"..","clear-sign","descriptors"),Ee(xe,"..","..","clear-sign","descriptors"),Ee(xe,"..","..","..","clear-sign","descriptors")];for(let t of e)if(Ki(t))return t;return e[0]}var xe,bp,Ep,pn=u(()=>{J();xe=Ji(Gi(import.meta.url));bp=Yi(),Ep=(1n<<256n)-1n});var mn=u(()=>{Mt();J();pn()});import{Wallet as Tp}from"ethers";import{base58 as Cp}from"@scure/base";import{ed25519 as Rp}from"@noble/curves/ed25519.js";import{NETWORK as $p,TEST_NETWORK as Pp,WIF as Bp,p2wpkh as Dp}from"@scure/btc-signer";import{pubECDSA as Fp}from"@scure/btc-signer/utils.js";var wn=u(()=>{});var Hp,zp,Up,Wp,Vp,Kp,Jp,Gp,Yp,Xp,Zp,hn=u(()=>{jt();Hp=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),zp=Object.freeze(["binance","bybit","okx","coinbase"]),Up=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),Wp=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),Vp=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),Kp=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),Jp=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),Gp=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),Yp=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),Xp=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),Zp=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"})});var gn=u(()=>{re()});var Qi,yn,Ve=u(()=>{Qi=Object.freeze({binance:Object.freeze({create:["POST","/api/v3/order"],cancel:["DELETE","/api/v3/order"],status:["GET","/api/v3/order"]}),bybit:Object.freeze({create:["POST","/v5/order/create"],cancel:["POST","/v5/order/cancel"],status:["GET","/v5/order/realtime"]}),okx:Object.freeze({create:["POST","/api/v5/trade/order"],cancel:["POST","/api/v5/trade/cancel-order"],status:["GET","/api/v5/trade/order"]}),coinbase:Object.freeze({create:["POST","/orders"],cancel:["DELETE","/orders/{order_id}"],status:["GET","/orders/{order_id}"]})}),yn=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"})});var bn=u(()=>{Ve()});var cm,En=u(()=>{Ve();bn();cm=256*1024});var xn=u(()=>{Ve();En()});var Sn=u(()=>{re()});import N from"node:path";import es from"node:os";import{createHash as ts,randomBytes as rw}from"node:crypto";import{Interface as Ht,keccak256 as ow}from"ethers";import{Transaction as sw}from"@scure/btc-signer";import{ed25519 as cw}from"@noble/curves/ed25519.js";function An(e){let t=process.env.ORACLE_SIGNER_STATE_DIR||N.join(process.env.XDG_STATE_HOME||N.join(es.homedir(),".local","state"),"oracle"),r=ts("sha256").update(N.resolve(e)).digest("hex").slice(0,16);return{vault:N.join(e,"vault.json"),policy:N.join(e,"signer-policy.json"),policyKey:N.join(e,"policy-integrity-key"),policyAnchor:N.join(t,`signer-policy-${r}.high-water`),ledger:N.join(e,"signer-ledger.json"),ledgerAnchor:N.join(t,`signer-ledger-${r}.high-water`),executionOutbox:N.join(e,"signer-execution-outbox.json"),cexOrders:N.join(e,"cex-orders.json"),cexOrdersAnchor:N.join(t,`cex-orders-${r}.high-water`),token:N.join(e,"signer-token"),lock:N.join(t,`signer-${r}.lock`),workflowLedger:N.join(e,"workflow-events.jsonl")}}var Fw,qw,Mw,vn=u(()=>{Lr();Pr();tn();rn();we();re();nn();jt();un();J();mn();Me();$e();vt();yt();Et();qe();At();bt();St();at();ct();xt();wn();hn();gn();xn();Sn();Fw=new Ht(["function collection() view returns (address)","function token() view returns (address)","function robinhoodSwapFeeWei() view returns (uint256)","function quoteSpecificBuy(uint256 tokenId) view returns (uint256 totalCost,uint256 baseCost,uint256 fee,uint256 protocolFee,bool available)","function quoteSellNFT() view returns (uint256 netPayout,uint256 grossPayout,uint256 fee,uint256 protocolFee)","function inventory(uint256 tokenId) view returns (bool)","function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),qw=new Ht(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),Mw=new Ht(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"])});import zt from"node:fs";import In from"node:path";import{homedir as rs}from"node:os";function ns(){return process.env.ORACLE_CONFIG_DIR||In.join(rs(),".config","oracle")}function Se(){let e=An(In.join(ns(),"signer")),t=zt.existsSync(e.vault),r=zt.existsSync(e.lock),n=t?r?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:t,policyConfigured:zt.existsSync(e.policy),armed:t&&!r,disarmed:r,capabilities:{swap:n,bridge:n},autonomous:!1,note:"Keys stay on this machine. Exact confirmation is required before any broadcast."}}var Zw,Ut=u(()=>{rt();sr();vn();re();Zw=Object.freeze([{type:"function",function:{name:"vault_status",description:"Read local Oracle vault/signer readiness. Never returns key material.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_status",description:"Ping the loopback signer. Fails closed if it is not running.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_pending",description:"List pending local-signer artifacts. Read-only. Does not approve, sign, or broadcast.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_queue",description:"Queue a prepared unsigned artifact on the loopback signer. Does not broadcast.",parameters:{type:"object",properties:{artifact:{type:"object"}},required:["artifact"],additionalProperties:!1}}},{type:"function",function:{name:"signer_deny",description:"Drop one pending local-signer artifact. Nothing signed.",parameters:{type:"object",properties:{id:{type:"string"},digest:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"signer_execute",description:"Broadcast one already-confirmed local artifact. Requires a one-use confirmationNonce from the local signer TTY confirm. Cannot mint confirmation itself.",parameters:{type:"object",properties:{artifact:{type:"object"},confirmationNonce:{type:"string",minLength:32,maxLength:128}},required:["artifact","confirmationNonce"],additionalProperties:!1}}},{type:"function",function:{name:"signer_disarm",description:"Global kill switch. Stops the local signer from broadcasting.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"receipt_report",description:"Receipt or it did not happen. Requires transactionHash/hash/txid.",parameters:{type:"object",properties:{receipt:{type:"object"},transactionHash:{type:"string"},hash:{type:"string"},txid:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"watch_create",description:"Create an alert-only watch. Never execute.",parameters:{type:"object",properties:{chain:{type:"string"},token:{type:"string"},condition:{type:"string"},note:{type:"string"}},required:["chain","token","condition"],additionalProperties:!1}}},{type:"function",function:{name:"watch_list",description:"List local alert-only watches.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"portfolio_snapshot",description:"How to read the one portfolio snapshot. knownUsd is incomplete if a provider is missing.",parameters:{type:"object",properties:{},additionalProperties:!1}}}])});import Ke from"node:fs";import os from"node:os";import ie from"node:path";import{fileURLToPath as is}from"node:url";function kn(){return process.env.ORACLE_FAKE_HOME||os.homedir()}function as(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function Je(){return as()?process.env.ORACLE_CONFIG_DIR||ie.join(kn(),".config","oracle"):ie.join(kn(),".config","oracle")}function cs(){return ie.join(Je(),"desk.json")}function us(){return ie.join(Je(),"env")}function oe({force:e=!1}={}){if(oe._done&&!e)return oe._result||null;oe._done=!0;let t={},r=(o,i)=>{if(i==null)return;let s=String(i).trim();s&&(process.env[o]!=null&&String(process.env[o]).trim()!==""||(process.env[o]=s,t[o]=s))};try{let o=us();if(Ke.existsSync(o))for(let i of Ke.readFileSync(o,"utf8").split(/\r?\n/)){let s=i.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!s||s[2].startsWith("#"))continue;let l=s[2];(l.startsWith('"')&&l.endsWith('"')||l.startsWith("'")&&l.endsWith("'"))&&(l=l.slice(1,-1)),r(s[1],l)}}catch{}try{let o=cs();if(Ke.existsSync(o)){let i=JSON.parse(Ke.readFileSync(o,"utf8"));i&&typeof i=="object"&&(r("ORACLE_DESK_URL",i.deskUrl||i.dataUrl||i.url),r("ORACLE_DATA_URL",i.dataUrl||i.deskUrl||i.url),r("ORACLE_API_URL",i.apiUrl||i.dataUrl||i.deskUrl),r("ORACLE_PUBLIC_URL",i.publicUrl||i.deskUrl||i.dataUrl),r("ORACLE_EXEC_URL",i.execUrl),r("MAD_DESK_URL",i.deskUrl||i.dataUrl))}}catch{}let n=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return n&&(r("ORACLE_DESK_URL",n),r("ORACLE_DATA_URL",n),r("ORACLE_API_URL",n),r("ORACLE_PUBLIC_URL",n),r("MAD_DESK_URL",n)),oe._result=Object.keys(t).length?t:null,oe._result}var ss,oh,On=u(()=>{ss=ie.dirname(is(import.meta.url)),oh=ie.resolve(ss,"../..");try{oe()}catch{}});function Ge(e){return String(e||"").trim()||void 0}function ds(e,{required:t=!1}={}){let r=Ge(e)?.toLowerCase();if(!r){if(t)throw new Error("model provider is required");return}if(!ls.has(r))throw new Error(`unsupported provider: ${r}`);return r}function fs(e,{required:t=!1}={}){let r=Ge(e);if(!r){if(t)throw new Error("model is required");return}if(r.includes("..")||r.startsWith("/")||!/^[a-zA-Z0-9._:/-]{1,200}$/.test(r))throw new Error("invalid model id");return r}function ps(e){let t=Ge(e);if(!t||t.length>2048)throw new Error("invalid custom base URL");let r;try{r=new URL(t)}catch{throw new Error("invalid custom base URL")}let n=r.hostname.toLowerCase().replace(/^\[|\]$/g,""),o=n==="localhost"||n==="127.0.0.1"||n==="::1";if(r.protocol!=="https:"&&!(r.protocol==="http:"&&o)||r.username||r.password||r.search||r.hash)throw new Error("custom base URL must use HTTPS or loopback HTTP without credentials, query, or fragment");return r.toString().replace(/\/+$/,"")}function Tn({provider:e,model:t,baseUrl:r}={},{requireModel:n=!1}={}){let o=ds(e),i=fs(t,{required:n});if(o==="custom")return{provider:o,...i?{model:i}:{},baseUrl:ps(r)};if(Ge(r))throw new Error("baseUrl is only supported for the custom provider");return{...o?{provider:o}:{},...i?{model:i}:{}}}var ls,Nn=u(()=>{ls=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","qwen","glm","local","ollama","custom","anthropic-oauth","openai-codex","xai-oauth"])});import Cn from"node:fs";import ms from"node:path";function hs(){return ms.join(Je(),"model.json")}function se(e){return String(e||"").trim()||void 0}function gs(e={}){let t=se(e.backend)?.toLowerCase()||"auto",r=Tn({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:t==="standalone"}),n=se(e.apiKeyEnv),o=Number.parseInt(String(e.contextLength||""),10),i=se(e.reasoningEffort),s=se(e.computeHost||e.remoteHost),l=se(e.computeUser||e.remoteUser),a=se(e.computePath||e.remotePath);if(!ws.has(t))throw new Error(`unsupported backend: ${t}`);if(process.env.ORACLE_PUBLIC_DESKTOP==="1"&&["remote","arch"].includes(t))throw new Error("remote compute backends are disabled in the public desktop");if(n&&!/^[A-Z][A-Z0-9_]*$/.test(n))throw new Error("api key env must be an uppercase environment variable name");if(t==="remote"&&!s)throw new Error("remote backend requires computeHost");return{backend:t,...r,...n?{apiKeyEnv:n}:{},...Number.isFinite(o)&&o>0?{contextLength:o}:{},...i?{reasoningEffort:i}:{},...s?{computeHost:s}:{},...l?{computeUser:l}:{},...a?{computePath:a}:{}}}function _n(){let e=hs();if(!Cn.existsSync(e))return null;try{return gs(JSON.parse(Cn.readFileSync(e,"utf8")))}catch{return null}}var ws,Rn=u(()=>{On();Nn();ws=new Set(["auto","standalone","hermes","remote","arch"])});import{Interface as ys,getAddress as bs}from"ethers";function Wt(e,t){try{return bs(e).toLowerCase()}catch{throw new Error(`${t} must be a valid EVM address`)}}function Es(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 Vt(e){return e==null?null:Number.parseInt(String(e),16)}function Ss(e,{rpcUrl:t,env:r=process.env}={}){if(t)return t;let n=ir(e,r);return n||xs[Number(e)]||null}function vs(e){let t=String(e||""),r=t.toLowerCase();if(t!==t.trim()||!/^[a-zA-Z0-9_]+$/.test(t)||!As.test(r))throw new Error(`evm-rpc: ${t} refused \u2014 @oracle-agent/oracle is prepare-only (read RPC only; no broadcast/sign)`);return r}function Is(e){let t=new Error(e?.message||JSON.stringify(e));return t.code=e?.code,t}function ks(e){if(e?.error)throw Is(e.error);return e?.result}function Os(e,t,r){return`${e}
1
+ var to=Object.defineProperty;var u=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(n){throw r=[n],n}};var Ne=(e,t)=>{for(var r in t)to(e,r,{get:t[r],enumerable:!0})};function or(e){return ro.get(Number(e))||null}function ir(e,t=process.env){let r=or(e);if(!r)return null;for(let n of r.rpcEnv){let o=(t[n]||"").trim();if(o)return o}return null}var Ce,ro,tt=u(()=>{Ce={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}},ro=new Map(Object.values(Ce).map(e=>[e.chainId,e]))});function de(e){let t=e?.transactionHash||e?.hash||e?.txid||null;return t?{happened:!0,hash:String(t),note:null}:{happened:!1,hash:null,note:"no transaction hash \u2014 the action did not succeed"}}var rt=u(()=>{});var sr=u(()=>{});var ar=u(()=>{});var fe=u(()=>{});var ee=u(()=>{});var Re=u(()=>{fe();ee()});import{isAddress as ca}from"ethers";var ot=u(()=>{Re();fe();ee()});import{Interface as io,isAddress as ma}from"ethers";var ya,cr=u(()=>{ot();fe();ee();ya=new io(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as so,isAddress as xa}from"ethers";var Ia,ka,ur=u(()=>{ot();fe();ee();Ia=new so(["function approve(address spender,uint256 amount) returns (bool)"]),ka=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var K=u(()=>{});import{Interface as ao,MaxUint256 as La,isAddress as $a,keccak256 as Pa,toUtf8Bytes as Ba}from"ethers";var Ha,J=u(()=>{ar();cr();ur();K();ee();Ha=new ao(["function approve(address spender,uint256 amount) returns (bool)"])});var Ua,Wa,Le=u(()=>{Ua=300*1e3,Wa=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});var $e=u(()=>{J()});import{Address as Ya,NETWORK as Xa,OutScript as Za,RawTx as Qa,SigHash as ec,TEST_NETWORK as tc,Transaction as rc}from"@scure/btc-signer";var at=u(()=>{});import{createHash as co}from"node:crypto";import{base58 as sc}from"@scure/base";import{getCompiledTransactionMessageDecoder as cc}from"@solana/transaction-messages";var lr,uc,ct=u(()=>{lr=e=>co("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),uc=new Map([[lr("route"),{name:"route",prefixBytes:0}],[lr("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]])});import G from"node:net";import uo from"node:dns";function Pe(e){let t=String(e).toLowerCase().split("%")[0];if((t.match(/::/g)||[]).length>1)return null;let r=a=>{if(!a)return[];let d=a.split(":"),m=d.at(-1);if(m?.includes(".")){let p=m.split(".").map(Number);if(p.length!==4||p.some(h=>!Number.isInteger(h)||h<0||h>255))return null;d.splice(d.length-1,1,(p[0]<<8|p[1]).toString(16),(p[2]<<8|p[3]).toString(16))}return d.some(p=>!/^[0-9a-f]{1,4}$/.test(p))?null:d.map(p=>Number.parseInt(p,16))},[n,o]=t.split("::"),i=r(n),s=r(o);if(!i||!s)return null;let l=t.includes("::"),c=8-i.length-s.length;if(!l&&c!==0||l&&c<1)return null;let f=[...i,...Array(Math.max(0,c)).fill(0),...s];return f.length!==8?null:Uint8Array.from(f.flatMap(a=>[a>>8,a&255]))}function ut(e,t,r){let n=Math.floor(r/8),o=r%8;for(let s=0;s<n;s+=1)if(e[s]!==t[s])return!1;if(!o)return!0;let i=255<<8-o;return(e[n]&i)===(t[n]&i)}function lt(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=Pe(e);if(!t)return!1;let r=Pe("::ffff:0:0");return ut(t,r,96)?lt([...t.slice(12)].join(".")):ut(t,Pe("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([o,i])=>ut(t,Pe(o),i)):!1}return!1}function fo(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(lo.has(r)||r.endsWith(".localhost")||r.endsWith(".internal"))return{ok:!1,error:`refused internal host ${r}`};let n=G.isIP(r);return n!==0&&!lt(r)?{ok:!1,error:`refused private address ${r}`}:{ok:!0,url:t,host:r,isLiteralIp:n!==0}}async function dt(e,{lookupFn:t=uo.promises.lookup}={}){let r=fo(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 n;try{n=await t(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=>!lt(o.address))?{ok:!1,error:`refused: ${r.host} resolves to a non-public address`}:{ok:!0,url:r.url,addresses:n}}async function ft({requireUndici:e=!1,importUndici:t=()=>import("undici")}={}){let r,n;try{let d=await t();r=d.Agent,n=d.fetch}catch(d){if(e)throw new Error(`egress-guard: untrustedUrl pinning requires the undici package, which failed to load: ${d?.message||d}`);return null}if(typeof r!="function"||typeof n!="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 o=d=>String(d).toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,""),i=new Map,s=d=>(Array.isArray(d)?d:[d]).map(m=>typeof m=="string"?{address:m}:m).filter(m=>m&&m.address).map(m=>({address:m.address,family:m.family||(G.isIPv6(m.address)?6:4)})),l=(d,m,p)=>{i.set(o(d),s(typeof m=="string"?[{address:m,family:p}]:m))},c=d=>{let m=o(d);if(G.isIP(m))return[{address:m,family:G.isIPv6(m)?6:4}];let p=i.get(m);if(!p||!p.length)throw new Error(`refused: unpinned host ${d} during pinned fetch`);return p},f=new r({connect:{lookup(d,m,p){let h;try{h=c(d)}catch(w){return p(w)}return m?.all?p(null,h):p(null,h[0].address,h[0].family)}}}),a=po((d,m={})=>n(d,{...m,dispatcher:f}),l);return{dispatcher:f,fetch:a,pin:l,resolve:c,async close(){try{await f.destroy()}catch{}}}}function po(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[pt]=Object.freeze({pin:t}),e}function mt(e){return typeof e=="function"&&typeof e[pt]?.pin=="function"}function dr(e,t,r){if(!mt(e))throw new Error("pinFetchToAddresses: fetchImpl is not pin-capable");e[pt].pin(t,r)}var lo,pt,fr=u(()=>{lo=new Set(["localhost","metadata.google.internal","metadata.goog"]);pt=Symbol.for("oracle.egressGuard.pinCapableFetch")});import{createHash as mo}from"node:crypto";import{types as j}from"node:util";function A(e){return H(`HTTP JSON body refused: ${e}`)}function Ao(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 j[t]=="function"&&j[t](e))}function vo(e){let t=[],r=0,n=0,o=0,i=0,s=new WeakSet,l=a=>{if(r+=Buffer.byteLength(a,"utf8"),r>D.bytes)throw A("serialized byte limit exceeded");t.push(a)},c=a=>{if(Buffer.byteLength(a,"utf8")>D.bytes)throw A("serialized byte limit exceeded");return JSON.stringify(a)},f=(a,d)=>{if(n+=1,n>D.nodes)throw A("node limit exceeded");if(d>D.depth)throw A("depth limit exceeded");if(a===null){l("null");return}if(typeof a=="string"){l(c(a));return}if(typeof a=="boolean"){l(a?"true":"false");return}if(typeof a=="number"){if(!Number.isFinite(a))throw A("non-finite number");l(Object.is(a,-0)?"0":String(a));return}if(typeof a!="object")throw A("unsupported non-JSON value");if(j.isProxy(a))throw A("proxy value");if(Ao(a))throw A("unsupported exotic object");if(s.has(a))throw A("cyclic value");s.add(a);try{if(Object.getOwnPropertySymbols(a).length>0)throw A("symbol-keyed fields are unsupported");if(Array.isArray(a)){let h=Object.getPrototypeOf(a),w=0;for(;h!==null;){if(j.isProxy(h))throw A("proxy array prototype");if(w+=1,w>D.depth)throw A("array prototype depth limit exceeded");h=Object.getPrototypeOf(h)}if(a.length>D.arrayLength)throw A("array length limit exceeded");for(let v=0;v<a.length;v+=1){let $=Object.getOwnPropertyDescriptor(a,String(v));if(!$||!Object.hasOwn($,"value")||$.enumerable!==!0)throw A("array entries must be dense enumerable own data")}let y=0;for(let v in a){if(i+=1,i>D.fields)throw A("enumeration limit exceeded");if(Object.hasOwn(a,v)&&(y+=1,y>a.length))throw A("named array fields are unsupported")}if(y!==a.length)throw A("array entries must be dense enumerable own data");l("[");for(let v=0;v<a.length;v+=1)v&&l(","),f(Object.getOwnPropertyDescriptor(a,String(v)).value,d+1);l("]");return}let m=Object.getPrototypeOf(a);if(m!==Object.prototype&&m!==null)throw A("non-plain object");let p=[];for(let h in a){if(i+=1,i>D.fields)throw A("enumeration limit exceeded");if(!Object.hasOwn(a,h))continue;if(o+=1,o>D.fields)throw A("field limit exceeded");let w=Object.getOwnPropertyDescriptor(a,h);if(!w||!Object.hasOwn(w,"value")||w.enumerable!==!0)throw A("object fields must be enumerable own data");p.push([h,w.value])}l("{");for(let h=0;h<p.length;h+=1)h&&l(","),l(c(p[h][0])),l(":"),f(p[h][1],d+1);l("}")}finally{s.delete(a)}};return f(e,0),t.join("")}function Io(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(j.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 n of Object.keys(e)){if(!/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/u.test(n))throw new TypeError("HTTP header names must be valid tokens");let o=n.toLowerCase();if(r.has(o))throw new TypeError("HTTP headers contain a duplicate canonical name");r.add(o);let i=Object.getOwnPropertyDescriptor(e,n);if(!i||!Object.hasOwn(i,"value"))throw new TypeError("HTTP headers must contain own data properties");let s=i.value;if(s==null||["object","function","symbol"].includes(typeof s))throw new TypeError("HTTP header values must be scalar");t[n]=String(s)}return t}function ko(){return Object.assign(Object.create(null),{Accept:"application/json"})}function Oo(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 To(e,t){return new URL(String(e)).origin===new URL(String(t)).origin}function Be(e){if((typeof e!="object"||e===null)&&typeof e!="function")return`${typeof e}:${String(e)}`;let t=gr.get(e);return t||(t=yr,yr+=1,gr.set(e,t)),`reference:${t}`}function br(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?No.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 Er(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(br);if(!r||typeof r!="object")return!1;if(Object.hasOwn(r,"jsonrpc")||Object.hasOwn(r,"method"))return br(r);let n=Object.hasOwn(r,"type")?r.type:null;return typeof n=="string"&&Co.has(n)&&(!Object.hasOwn(r,"action")||r.action==null)&&(!Object.hasOwn(r,"signature")||r.signature==null)&&(!Object.hasOwn(r,"nonce")||r.nonce==null)}function _o(e,t,r,n={},o=null){let i=mo("sha256"),s=(c,f)=>{let a=String(f);i.update(String(Buffer.byteLength(c,"utf8"))).update(":").update(c),i.update("=").update(String(Buffer.byteLength(a,"utf8"))).update(":").update(a).update(`
2
+ `)};s("method",e),s("url",t),Object.keys(r||{}).map((c,f)=>({name:c.toLowerCase(),order:f,value:String(r[c])})).sort((c,f)=>c.name.localeCompare(f.name)||c.order-f.order).forEach((c,f)=>{s(`header-name-${f}`,c.name),s(`header-value-${f}`,c.value)}),s("body",o??"-");for(let c of["untrustedUrl","maxResponseBytes","sameOriginRedirectsOnly","redirectPolicy","maxRedirects","timeoutMs","retries","fetchImpl","realFetch","lookupFn","importUndici","validateResponse"])s(`context-${c}`,n[c]??"-");return i.digest("hex")}function Ro(e,t){let r=Number(t);return Number.isFinite(r)&&r>0?Math.min(r*1e3,mr):Math.min(250*2**e,mr)+Math.floor(Math.random()*100)}function H(e,t={}){let r=new Error(e);return r.retryable=!1,Object.assign(r,t),r}function ht(e,t,r){return H(`HTTP response from ${e} exceeded maxResponseBytes ${r} (${t})`,{oversize:!0})}function Y(e){try{let t=e?.body?.cancel?.();t&&typeof t.then=="function"&&t.catch(()=>{})}catch{}}function $o(e){return e?e.byteLength??e.length??0:0}async function Po(e,t,{url:r,truncate:n=!1,onOversize:o}={}){if(t==null)return await e.text();let i=Number(e.headers?.get?.("content-length"));if(Number.isFinite(i)&&i>t&&(Y(e),!n))throw ht(r,`content-length ${i}`,t);let s=e.body?.getReader?.();if(!s){let d=await e.text(),m=Buffer.byteLength(d,"utf8");if(m>t){if(!n)throw ht(r,`body ${m} bytes`,t);return Buffer.from(d,"utf8").subarray(0,t).toString("utf8")}return d}let l=[],c=0,f=!1;try{for(;;){let{value:d,done:m}=await s.read();if(m)break;if(d&&(l.push(Buffer.from(d)),c+=$o(d),c>t)){f=!0;break}}}finally{if(f)try{await s.cancel()}catch{}try{s.releaseLock?.()}catch{}}if(f&&(typeof o=="function"&&o(),!n))throw ht(r,`streamed ${c} bytes`,t);let a=Buffer.concat(l);return(f?a.subarray(0,t):a).toString("utf8")}function Bo(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}async function Do(e,{fetchImpl:t,method:r,headers:n,body:o,timeoutMs:i,lookupFn:s,realFetch:l,untrustedUrl:c=!1,maxResponseBytes:f=null,sameOriginRedirectsOnly:a=!1,importUndici:d,validateResponse:m,signal:p,redirectPolicy:h="follow",maxRedirects:w=De}){let y=null,v=t,$=s?{lookupFn:s}:{};if(c&&!l&&!mt(v))throw H(`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,P=setTimeout(()=>_.abort(),i),U=p?hr?hr([p,_.signal]):p:_.signal,ae=async(b,{status:k=null}={})=>{let O=await dt(b,$);if(!O.ok)throw H(k==null?`HTTP refused ${b}: ${O.error}`:`HTTP redirect to ${b} ${O.error}`,k==null?{}:{status:k});let M=new URL(b).hostname;if(l){if(y&&(await y.close(),y=null),!y)try{y=await ft({requireUndici:!0,...d?{importUndici:d}:{}})}catch(g){throw H(k==null?`HTTP refused ${b}: ${g?.message||g}`:`HTTP redirect to ${b} refused: ${g?.message||g}`,k==null?{}:{status:k})}y.pin(M,O.addresses),v=y.fetch}else dr(v,M,O.addresses);return O};try{let b=String(e),k=Object.assign(Object.create(null),n||{});c&&await ae(b);for(let O=0;O<=w;O+=1){let M=Object.assign(Object.create(null),{method:r,headers:k,body:o,signal:U,redirect:"manual",dispatcher:void 0}),g=await v(b,M);if((h==="error"||w===0)&&g.status>=300&&g.status<400)throw Y(g),H(`HTTP ${g.status} ${r} redirect refused`,{status:g.status,redirectRefused:!0});if(So.has(g.status)){let R=a===!0&&r==="POST"&&[307,308].includes(g.status)&&Er(r,o);if(r!=="GET"&&r!=="HEAD"&&!R){Y(g);let I=new Error(`HTTP ${g.status} ${r} ${b} redirected non-idempotent request`);throw I.status=g.status,I}if(O===w)throw Y(g),H(`HTTP ${g.status} ${r} redirect budget exhausted`,{status:g.status,redirectRefused:!0});let tr=g.headers?.get?.("location"),B;try{B=Oo(tr,b)}catch(I){throw Y(g),I}let W=!To(B,b);if(Y(g),W&&r==="POST"){let I=new Error(`HTTP ${g.status} ${r} cross-origin redirect refused`);throw I.status=g.status,I}if(W&&a){let I=new Error(`HTTP ${g.status} ${r} cross-origin redirect refused`);throw I.status=g.status,I.retryable=!1,I}if(W&&(k=ko(k)),c)await ae(B,{status:g.status});else if(W){let I=await dt(B,$);if(!I.ok){let S=new Error(`HTTP redirect from ${b} ${I.error}`);throw S.status=g.status,S.retryable=!1,S}l&&I.addresses?.length&&(y||(y=await ft(d?{importUndici:d}:{})),y&&(y.pin(new URL(B).hostname,I.addresses),v=y.fetch))}b=B;continue}if(typeof m=="function")try{await m(g,{url:b})}catch(R){throw Y(g),H(R?.message||String(R))}let T=await Po(g,f,{url:b,onOversize:()=>_.abort()}),ce=Bo(T);if(!g.ok){let R=new Error(`HTTP ${g.status} ${r} ${b}`);throw R.status=g.status,R.retryAfter=g.headers?.get?.("retry-after")??null,R.body=ce??T.slice(0,300),R}return ce??T}throw new Error(`HTTP redirect loop for ${e}`)}catch(b){if(_.signal.aborted&&!me(p)){let k=b&&(typeof b=="object"||typeof b=="function")&&!j.isProxy(b)?b:null,O=k?Object.getOwnPropertyDescriptor(k,"oversize"):null;if(!(O&&Object.hasOwn(O,"value")&&O.value===!0))try{if(!k)throw new TypeError("unsafe rejection");Object.defineProperties(k,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}})}catch{let g=new Error("HTTP request timed out");throw Object.defineProperties(g,{oracleTimeout:{value:!0,enumerable:!1},retryable:{value:!1,enumerable:!1}}),g}}throw b}finally{clearTimeout(P),y&&await y.close()}}async function je(e,t={}){if(t!=null&&typeof t!="object"&&typeof t!="function")throw new TypeError("HTTP options must be an object");if(t!=null&&j.isProxy(t))throw new TypeError("HTTP options must not be a proxy");let r=new Set(["body","dedupe","fetchImpl","headers","importUndici","lookupFn","maxRedirects","maxResponseBytes","method","redirectPolicy","retries","sameOriginRedirectsOnly","signal","timeoutMs","untrustedUrl","validateResponse"]);if(t!=null){if(Object.getOwnPropertySymbols(t).length>0)throw new TypeError("HTTP options contain unknown fields");for(let S of Object.getOwnPropertyNames(t)){let E=Object.getOwnPropertyDescriptor(t,S);if(!(S==="toJSON"&&E&&Object.hasOwn(E,"value")&&E.value===void 0)){if(!r.has(S))throw new TypeError("HTTP options contain unknown fields");if(!E||!E.enumerable||!Object.hasOwn(E,"value"))throw new TypeError("HTTP options must contain enumerable own data properties")}}}let n=S=>{if(t==null||!Object.hasOwn(t,S))return;let E=Object.getOwnPropertyDescriptor(t,S);if(!E||!Object.hasOwn(E,"value"))throw new TypeError("HTTP options must contain own data properties");return E.value};if(typeof e!="string"||e.length===0||e.length>8192)throw new TypeError("HTTP URL must be a bounded string");let o=n("method");if(o!==void 0&&(typeof o!="string"||!/^[A-Za-z]+$/u.test(o)))throw new TypeError("HTTP method must be a string token");let i=n("timeoutMs");if(i!==void 0&&(!Number.isInteger(i)||i<1||i>12e4))throw new TypeError("HTTP timeoutMs must be a bounded integer");let s=n("retries");if(s!==void 0&&(!Number.isInteger(s)||s<0||s>10))throw new TypeError("HTTP retries must be a bounded integer");let l=n("redirectPolicy");if(l!==void 0&&l!=="follow"&&l!=="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>De))throw new TypeError(`HTTP maxRedirects must be an integer from 0 through ${De}`);if(l==="error"&&c!==void 0&&c!==0)throw new TypeError('HTTP redirectPolicy "error" requires maxRedirects 0 when supplied');let f=l??"follow",a=f==="error"?0:c??De;for(let S of["dedupe","untrustedUrl","sameOriginRedirectsOnly"]){let E=n(S);if(E!==void 0&&typeof E!="boolean")throw new TypeError(`HTTP ${S} must be boolean`)}let d=n("maxResponseBytes");if(d!==void 0&&(!Number.isInteger(d)||d<1||d>64*1024*1024))throw new TypeError("HTTP maxResponseBytes must be a bounded integer");let m=n("signal");if(m!==void 0){if(j.isProxy(m)||!(m instanceof AbortSignal))throw new TypeError("HTTP signal must be a native AbortSignal");try{me(m)}catch{throw new TypeError("HTTP signal must be a native AbortSignal")}}for(let S of["importUndici","lookupFn","validateResponse"]){let E=n(S);if(E!==void 0&&typeof E!="function")throw new TypeError(`HTTP ${S} must be a function`)}let p=n("fetchImpl"),h=p||globalThis.fetch;if(typeof h!="function")throw new Error("fetch unavailable \u2014 pass opts.fetchImpl");let w=i??12e3,y=(o||"GET").toUpperCase(),v=n("headers"),$=Io(v),_=Object.assign(Object.create(null),$);Object.keys(_).some(S=>S.toLowerCase()==="accept")||(_.Accept="application/json");let P=n("body");P!=null&&typeof P!="string"&&(Object.keys(_).find(E=>E.toLowerCase()==="content-type")||(_["Content-Type"]="application/json"),P=vo(P));let U=s??ho,ae=n("lookupFn"),b=!p,k=n("untrustedUrl")===!0,O=n("sameOriginRedirectsOnly")===!0,M=n("importUndici"),g=n("validateResponse"),T=m,ce=d??null,R=async()=>{let S;for(let E=0;E<=U;E++){T&&bo.call(T);try{return await Do(e,{fetchImpl:h,method:y,headers:_,body:P,timeoutMs:w,lookupFn:ae,realFetch:b,untrustedUrl:k,maxResponseBytes:ce,sameOriginRedirectsOnly:O,importUndici:M,validateResponse:g,signal:T,redirectPolicy:f,maxRedirects:a})}catch(V){S=V;let Q=et=>{if(!V||typeof V!="object"&&typeof V!="function"||j.isProxy(V))return;let ue=Object.getOwnPropertyDescriptor(V,et);return ue&&Object.hasOwn(ue,"value")?ue.value:void 0},Qe=Q("status"),Zn=Q("oracleTimeout")===!0||Q("name")==="AbortError"||Q("name")==="TimeoutError"||me(T),Qn=new Set([408,425,429]),eo=Q("retryable")===!1?!1:Qe!=null?Qn.has(Qe)||wo.has(Qe)&&pr.has(y):!Zn&&pr.has(y);if(E===U||!eo)throw V;let rr=Ro(E,Q("retryAfter"));T?await new Promise((et,ue)=>{let nr,le=()=>{clearTimeout(nr),wr.call(T,"abort",le),ue(xo(T)||new DOMException("Aborted","AbortError"))};if(me(T)){le();return}nr=setTimeout(()=>{wr.call(T,"abort",le),et()},rr),Eo.call(T,"abort",le,{once:!0}),me(T)&&le()}):await Lo(rr)}}throw S};if(!(n("dedupe")!==!1&&!T&&Er(y,P)))return R();let B=_o(y,e,_,{untrustedUrl:k,maxResponseBytes:ce,sameOriginRedirectsOnly:O,redirectPolicy:f,maxRedirects:a,timeoutMs:w,retries:U,fetchImpl:Be(h),realFetch:b,lookupFn:Be(ae),importUndici:Be(M),validateResponse:Be(g)},P),W=wt.get(B);if(W)return W;let I=R().finally(()=>wt.delete(B));return wt.set(B,I),I}var wo,pr,ho,mr,go,yo,bo,Eo,wr,hr,me,xo,So,De,gc,D,wt,gr,yr,No,Co,Lo,Fe=u(()=>{fr();wo=new Set([408,425,429,500,502,503,504]),pr=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),ho=2,mr=4e3,go=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"aborted")?.get,yo=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"reason")?.get,bo=AbortSignal.prototype.throwIfAborted,Eo=EventTarget.prototype.addEventListener,wr=EventTarget.prototype.removeEventListener,hr=typeof AbortSignal.any=="function"?AbortSignal.any.bind(AbortSignal):null,me=e=>e?go.call(e):!1,xo=e=>e?yo.call(e):void 0,So=new Set([301,302,303,307,308]),De=3,gc=64*1024,D=Object.freeze({depth:32,nodes:1e4,fields:1e4,arrayLength:1e4,bytes:1024*1024});wt=new Map,gr=new WeakMap,yr=1;No=new Set(["eth_blockNumber","eth_call","eth_chainId","eth_estimateGas","getHealth","minimumLedgerSlot","net_version","simulateTransaction","web3_clientVersion"]),Co=new Set(["allMids","l2Book","outcomeMeta","spotClearinghouseState","userFills","meta","metaAndAssetCtxs","perpDexs","candleSnapshot","fundingHistory","openOrders","frontendOpenOrders","clearinghouseState","spotMeta","validatorSummaries","delegatorSummary","delegations","delegatorRewards","delegatorHistory","maxBuilderFee"]);Lo=e=>new Promise(t=>setTimeout(t,e))});var xr=u(()=>{});var Sr=u(()=>{Fe();xr()});var Oc,Ar=u(()=>{Sr();Oc=Object.freeze({tradexyz:"xyz",ventuals:"vntl",hypernova:"hyna",paradex:"para",entropy:"io",entropyio:"io"})});var Rc,Lc,yt=u(()=>{K();Ar();Rc=Object.freeze({"perp-order":"order","hip3-order":"order","hip4-order":"order","perp-bracket":"order","perp-cancel":"cancel","perp-leverage":"leverage","perp-isolated-margin":"margin","builder-fee-approval":"approveBuilder","hype-stake-deposit":"stake","hype-stake-withdraw":"unstake","hype-delegate":"delegate","hype-undelegate":"delegate"}),Lc=Object.freeze({"perp-order":"order","hip3-order":"order","hip4-order":"order","perp-bracket":"order","perp-cancel":"cancel","perp-leverage":"updateLeverage","perp-isolated-margin":"updateIsolatedMargin","builder-fee-approval":"approveBuilderFee","hype-stake-deposit":"cDeposit","hype-stake-withdraw":"cWithdraw","hype-delegate":"tokenDelegate","hype-undelegate":"tokenDelegate"})});var Bc,bt=u(()=>{K();Bc="0x"+"00".repeat(32)});var jo,Mc,Et=u(()=>{bt();K();jo=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),Mc=Object.freeze(jo.map(e=>e[0]))});var qe=u(()=>{K()});import{TypedDataEncoder as Vc,getAddress as Kc,isAddress as Jc}from"ethers";var qo,Mo,Or=u(()=>{Le();qo=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),Mo=Object.freeze({Order:[{name:"salt",type:"uint256"},{name:"maker",type:"address"},{name:"receiver",type:"address"},{name:"makerAsset",type:"address"},{name:"takerAsset",type:"address"},{name:"makingAmount",type:"uint256"},{name:"takingAmount",type:"uint256"},{name:"makerTraits",type:"uint256"}]})});var Xc,Tr=u(()=>{Xc=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"})});var Nr=u(()=>{});import{TypedDataEncoder as iu,getAddress as su,isAddress as au}from"ethers";var Ho,mu,zo,wu,Cr=u(()=>{Fe();Re();Tr();Nr();Le();Ho=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),mu=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"}),zo=Object.freeze({Order:[{name:"sellToken",type:"address"},{name:"buyToken",type:"address"},{name:"receiver",type:"address"},{name:"sellAmount",type:"uint256"},{name:"buyAmount",type:"uint256"},{name:"validTo",type:"uint32"},{name:"appData",type:"bytes32"},{name:"feeAmount",type:"uint256"},{name:"kind",type:"string"},{name:"partiallyFillable",type:"bool"},{name:"sellTokenBalance",type:"string"},{name:"buyTokenBalance",type:"string"}]}),wu=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]})});import{TypedDataEncoder as yu,getAddress as bu}from"ethers";var Su,xt=u(()=>{Or();Cr();Su=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"])});import{Interface as Rr}from"ethers";var Go,Fu,Yo,qu,Mu,Hu,zu,Xo,Uu,Me=u(()=>{J();Re();Le();$e();at();ct();yt();Et();qe();xt();Go=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]),Fu=Object.freeze({swap:5,bridge:5,perps:0,nft:0,mint:0,transfer:0,approve:0,delegate:0,identity:0,order:0,cancel:0,leverage:0,margin:0,approveBuilder:0,stake:0,unstake:0}),Yo=Object.freeze({"0x04e45aaf":{provider:"uniswap-v3",action:"swap",layout:"router02-exact-input-single"},"0x414bf389":{provider:"uniswap-v3",action:"swap",layout:"swap-router-exact-input-single"},"0xc04b8d59":{provider:"uniswap-v3",action:"swap",layout:"exact-input-deadline"},"0xb858183f":{provider:"uniswap-v3",action:"swap",layout:"exact-input"},"0x5ae401dc":{provider:"uniswap-v3",action:"swap",layout:"multicall-deadline"},"0xa026383e":{provider:"aerodrome",action:"swap",layout:"aerodrome-exact-input-single"},"0x7b939232":{provider:"across-v3",action:"bridge",layout:"across-deposit-v3"}}),qu=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),Mu=new Rr(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Hu=new Rr(["function mintAllowList(address nftContract,address feeRecipient,address minterIfNotPayer,uint256 quantity,(uint80 mintPrice,uint48 maxTotalMintableByWallet,uint48 startTime,uint48 endTime,uint48 dropStageIndex,uint32 maxTokenSupplyForStage,uint16 feeBps,bool restrictFeeRecipients) mintParams,bytes32[] proof) payable"]),zu=Object.freeze({"0xa0712d68":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0x1249c58b":{provider:"nft-mint",action:"mint",layout:"mint-no-args"},"0x2db11544":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0xefef39a1":{provider:"nft-mint",action:"mint",layout:"mint-quantity"},"0xa6f2ae3a":{provider:"nft-mint",action:"mint",layout:"mint-no-args"}}),Xo=Object.freeze([...Go]),Uu=Object.freeze({...Yo})});import{encode as Ku}from"@msgpack/msgpack";import{keccak256 as Gu,verifyTypedData as Yu}from"ethers";var Xu,Zu,St=u(()=>{Xu=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Zu=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var At=u(()=>{qe()});import{ed25519 as sl}from"@noble/curves/ed25519.js";import{base58 as cl}from"@scure/base";import{RawTx as ll,SigHash as dl,Transaction as fl}from"@scure/btc-signer";import{Transaction as ml,keccak256 as wl,verifyTypedData as hl}from"ethers";var vt=u(()=>{St();At()});import{base58 as Al}from"@scure/base";var we=u(()=>{Me();$e();J();vt()});var Lr=u(()=>{we();Me()});import{wordlists as ei}from"ethers";function oi(e){let t=String(e).trim().toLowerCase().split(/\s+/).filter(Boolean);return ni.has(t.length)&&t.every(r=>ei.en.getWordIndex(r)>=0)}function ci(e){let t=$r(e);return ai.has(t)||si.test(t)}function $r(e){return String(e).replace(/[^a-z0-9]/gi,"").toLowerCase()}function ui(e){let t=$r(e);return[...ti].some(r=>t.includes(r))}function li(e,t,r){if(typeof t=="string"){if(ri.some(n=>n.test(t))||oi(t))throw new he(r);if(ii.test(t)&&!ci(e))throw new he(r)}}function kt(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string")return li(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((o,i)=>kt(o,`${t}[${i}]`,r));if(typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`action receipt: JSON-like value required at ${t}`);let n={};for(let o of Object.keys(e).sort()){let i=`${t}.${o}`;if(ui(o))throw new he(i);e[o]!==void 0&&(n[o]=kt(e[o],i,o))}return n}function He(e){return kt(e)}var ti,ri,ni,ii,si,ai,he,ge=u(()=>{ti=new Set(["privatekey","privkey","secretkey","seedphrase","seed","mnemonic","passphrase","password","keystore","keymaterial","wif","xprv","xpriv","bearer","authorization","signature","apikey","credential"]),ri=[/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/,/\bxprv[0-9A-Za-z]{50,}\b/],ni=new Set([12,15,18,21,24]);ii=/^\s*(?:0x)?[0-9a-fA-F]{64}\s*$/,si=/(hash|digest|root|salt|nonce|proof|commitment|sig|id)(?:e?s)?$/i,ai=new Set(["calldata","data","publickey","pubkey","message","payload","input","extradata"]);he=class extends Error{constructor(t){super(`action receipt refused: secret-bearing field at ${t}`),this.name="ActionReceiptSecretError",this.code="ACTION_RECEIPT_SECRET"}}});import{closeSync as jl,constants as di,fchmodSync as Fl,fsyncSync as ql,lstatSync as Ml,mkdirSync as Hl,openSync as zl,readFileSync as Ul,renameSync as Wl,rmSync as Vl,writeFileSync as Kl}from"node:fs";var Yl,Pr=u(()=>{ge();we();Yl=di.O_NOFOLLOW??0});import{wordlists as Ql}from"ethers";var Br,td,te=u(()=>{ge();Br=64*1024,td=32*1024});var mi,od,id,Ue=u(()=>{te();mi=["schemaVersion","buildVersion","recordType","execution","custody"],od=[...mi,"recordHash"],id=Object.freeze({signed:new Set(["workflow.signed","legacy.signed"]),submitted:new Set(["workflow.submitted","legacy.broadcast"]),finalized:new Set(["workflow.finalized"]),reorged:new Set(["workflow.reorged"]),orphaned:new Set(["workflow.orphaned"]),compensating:new Set(["workflow.compensating"]),compensated:new Set(["workflow.compensated"])})});var wi,Wr,ld,_t=u(()=>{te();Ue();wi=Object.freeze(["draft","checked","approval","signed","submitted","finalized","reorged","orphaned","compensating","compensated","failed","cancelled"]),Wr=Object.freeze(["workflow.drafted","workflow.checked","workflow.approval_requested","workflow.approval_granted","workflow.signed","workflow.submitted","workflow.finalized","workflow.reorged","workflow.orphaned","workflow.compensating","workflow.compensated","workflow.failed","workflow.cancelled","workflow.annotated"]),ld=new Set(Wr)});var xi,Vr=u(()=>{te();_t();xi=64*1024*1024});var gd,yd,bd,Kr=u(()=>{gd=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),yd=Object.freeze(["read","simulate"]),bd=1440*60});function Rt(e){let t=String(e),r=t.toLowerCase().replace(/[\s._-]+/g,"");return Si.test(t)||Ai.includes(r)}function vi(e){return e.replace(/"([A-Za-z0-9_-]+)"\s*:\s*"(?:0x)?([0-9a-fA-F]{64})"/g,(t,r)=>Gr.includes(String(r).toLowerCase().replace(/[_-]/g,""))?`"${r}":"<hex64>"`:t)}function Yr(e){let t;try{t=JSON.stringify(e)}catch(o){throw new F("$",`unserializable-payload: ${String(o?.message||o)}`)}if(t===void 0)return"null";let r=vi(t);for(let{rule:o,re:i}of Jr)if(i.test(r))throw new F("$<serialized>",o);if(/(?:^|[^0-9a-fA-Fx])0x[0-9a-fA-F]{64}(?![0-9a-fA-F])/.test(r))throw new F("$<serialized>","raw-32-byte-hex-embedded");return JSON.parse(t,(o,i)=>{if(o&&Rt(o))throw new F(`$<serialized>.${o}`,"forbidden-key-name");return i}),t}function z(e,t="$",r=new Set,n=""){if(e==null)return e;if(typeof e=="string"){let o=Gr.includes(String(n).toLowerCase().replace(/[_-]/g,""));for(let{rule:i,re:s}of Jr)if(!(o&&i.startsWith("raw-32-byte-hex"))&&s.test(e))throw new F(t,i);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[o,i]of e.entries()){if(typeof o=="string"&&Rt(o))throw new F(`${t}[${JSON.stringify(o)}]`,"forbidden-key-name");z(o,`${t}[key]`,r),z(i,`${t}[${String(o)}]`,r)}return e}if(e instanceof Set){let o=0;for(let i of e.values())z(i,`${t}[${o++}]`,r);return e}if(Array.isArray(e))return e.forEach((o,i)=>z(o,`${t}[${i}]`,r)),e;for(let[o,i]of Object.entries(e)){if(Rt(o))throw new F(`${t}.${o}`,"forbidden-key-name");z(i,`${t}.${o}`,r,o)}return e}var F,Si,Ai,Jr,Gr,Lt=u(()=>{Kr();F=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}},Si=/(private[_-]?key|secret|bearer|keystore|mnemonic|seed[_-]?phrase|passphrase|password|api[_-]?key|access[_-]?token|auth[_-]?token|session[_-]?token|signer[_-]?url|signature)/i,Ai=Object.freeze(["privkey","wif","xprv","seed"]);Jr=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}]),Gr=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"])});var $t,Cd,Xr=u(()=>{Lt();$t=Object.freeze(["intent","quote_comparison","simulation","prepared","approval","signed","broadcast","settlement","balance_delta","position"]),Cd=Object.freeze(Object.fromEntries($t.map((e,t)=>[e,Object.freeze(t+1<$t.length?[$t[t+1]]:[])])))});var Ii,Zr=u(()=>{Xr();te();Ue();Ii=Object.freeze({intent:"draft",quote_comparison:"draft",simulation:"draft",prepared:"checked",approval:"approval",signed:"signed",broadcast:"submitted",settlement:"finalized",balance_delta:"compensated",position:"compensated"})});var Qr=u(()=>{te();Ue();_t();Vr();Zr()});var Oi,Ti,Ni,wf,hf,gf,yf,bf,Ci,Ef,en=u(()=>{Oi=Object.freeze(["owner","operator","agent","viewer"]),Ti=Object.freeze(["tenant","config","policy","grant","workflow","trade","receipt","audit","telemetry","context","lifecycle"]),Ni=Object.freeze({read:"read",create:"create",update:"update",delete:"delete",manage:"manage",prepare:"prepare",cancel:"cancel",export:"export",approve:"approve"}),wf=Object.freeze(["owner"]),hf=Object.freeze({ALLOW_ROLE_PERMISSION:"allow.role_permission",DENY_MISSING_CONTEXT:"deny.missing_context",DENY_INVALID_CONTEXT:"deny.invalid_context",DENY_INVALID_REQUEST:"deny.invalid_request",DENY_UNKNOWN_RESOURCE:"deny.unknown_resource",DENY_UNKNOWN_ACTION:"deny.unknown_action",DENY_UNBOUND_OBJECT:"deny.unbound_object",DENY_TENANT_MISMATCH:"deny.tenant_mismatch",DENY_RESOURCE_MISMATCH:"deny.resource_mismatch",DENY_ROLE_PERMISSION:"deny.role_permission",DENY_POLICY_NOT_APPROVER:"deny.policy_not_approver"}),gf=new Set(Oi),yf=new Set(Ti),bf=new Set(Object.values(Ni)),Ci=Object.freeze({owner:Object.freeze(["tenant:read","tenant:manage","config:read","config:manage","policy:read","policy:manage","grant:read","grant:create","grant:update","grant:delete","grant:manage","workflow:read","workflow:create","workflow:update","workflow:delete","workflow:cancel","workflow:approve","trade:read","trade:prepare","receipt:read","receipt:export","audit:read","audit:export","telemetry:read","telemetry:create","telemetry:export","context:read","context:create","context:update","context:delete","context:manage","context:export","lifecycle:read","lifecycle:create","lifecycle:update","lifecycle:delete","lifecycle:manage","lifecycle:approve","lifecycle:export"]),operator:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","workflow:cancel","trade:read","trade:prepare","receipt:read","audit:read","telemetry:read","telemetry:create","context:read","context:create","context:update","context:delete","lifecycle:read","lifecycle:create","lifecycle:update","lifecycle:manage"]),agent:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","trade:read","trade:prepare","receipt:read","telemetry:create","context:read","context:create","context:update","lifecycle:read"]),viewer:Object.freeze(["tenant:read","config:read","grant:read","workflow:read","trade:read","receipt:read","audit:read","telemetry:read","context:read","lifecycle:read"])}),Ef=Object.freeze(Object.fromEntries(Object.entries(Ci).map(([e,t])=>[e,Object.freeze([...t])])))});var _i,Ri,Li,vf,If,kf,Of,Tf,Nf,Pt=u(()=>{en();_i=Object.freeze(["succeeded","denied","invalid","failed","cancelled","timed_out","unavailable","skipped"]),Ri=Object.freeze(["workflow","task","intent","plan","run","event","eval"]),Li=Object.freeze(["taskId","intentId","planId","runId","eventId"]),vf=Object.freeze({maxAttributes:24,maxKeyLength:48,maxStringLength:256,maxArrayLength:8}),If=new Set(_i),kf=new Set(Ri),Of=new Set(Li),Tf=Object.freeze(["authorization","bearer","cookie","credential","password","passphrase","secret","token","privatekey","privkey","seed","mnemonic","keystore","signature","prompt","systemmessage","usermessage","assistantmessage","rawtransaction","signedtransaction","serializedtransaction","transactionbytes","calldata","callbytes","inputdata"]),Nf=Object.freeze({taskId:"x-oracle-task-id",intentId:"x-oracle-intent-id",planId:"x-oracle-plan-id",runId:"x-oracle-run-id",eventId:"x-oracle-event-id"})});var Pf,tn=u(()=>{Qr();Pt();Pf=Object.freeze({"workflow.cancelled":"cancelled","workflow.failed":"failed"})});var Mf,rn=u(()=>{Pt();Mf=32*1024*1024});var zf,Uf,Wf,re=u(()=>{zf=Object.freeze({N:1<<17,r:8,p:1}),Uf=256*1024*1024,Wf=16*1024});var Kf,nn=u(()=>{Kf=Object.freeze({1:{name:"ethereum",mode:"mempool-private",endpoints:["https://rpc.flashbots.net/fast","https://rpc.mevblocker.io"]},8453:{name:"base",mode:"sequencer",endpoints:["https://mainnet-sequencer.base.org"]},10:{name:"optimism",mode:"sequencer",endpoints:["https://mainnet-sequencer.optimism.io"]},42161:{name:"arbitrum",mode:"sequencer",endpoints:["https://arb1-sequencer.arbitrum.io/rpc"]},56:{name:"bsc",mode:"mempool-private",endpoints:["https://rpc.48.club","https://bsc.rpc.blxrbdn.com"]},137:{name:"polygon",mode:"mempool-private",endpoints:["https://polygon-bor-rpc.publicnode.com"]},43114:{name:"avalanche",mode:"public-only",endpoints:[]},999:{name:"hyperevm",mode:"public-only",endpoints:[]}})});import{homedir as Bt}from"node:os";import{join as Dt}from"node:path";var on,$i,Xf,sn=u(()=>{on=process.env.ORACLE_PUBLIC_DESKTOP==="1",$i=on?process.env.ORACLE_CONFIG_DIR||Dt(Bt(),".config","oracle"):Dt(Bt(),".config","oracle"),Xf=on?$i:Dt(Bt(),".config","mad-desk")});var rp,np,op,an=u(()=>{sn();rp="0".repeat(64),np=Object.freeze({PREPARE:"exec.prepare",SIGN:"exec.sign",BROADCAST:"exec.broadcast",POLICY_REJECT:"policy.reject",AUTH_GRANT:"auth.grant",AUTH_OK:"auth.verify.ok",AUTH_FAIL:"auth.verify.fail"}),op=Promise.resolve()});var jt=u(()=>{an();K();re();we()});var un=u(()=>{});var fn={};Ne(fn,{SIGN_TIME_REVIEW_VERSION:()=>Pi,SignTimeReviewSecretError:()=>ye,createSignTimeReview:()=>dn});function Ft(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string"){let o=e.trim().split(/\s+/);if(qi.test(e)||Mi.has(o.length)&&o.every(i=>/^[a-z]+$/i.test(i)))throw new ye(t);return e}if(typeof e=="bigint")return e.toString();if(typeof e=="number"){if(!Number.isSafeInteger(e))throw new TypeError(`sign-time review: safe integer required at ${t}`);return e}if(Array.isArray(e))return e.map((o,i)=>Ft(o,`${t}[${i}]`,r));X(e,t);let n={};for(let o of Object.keys(e).sort()){let i=o.replace(/[^a-z0-9]/gi,"");if(Fi.test(i))throw new ye(`${t}.${o}`);e[o]!==void 0&&(n[o]=Ft(e[o],`${t}.${o}`,o))}return n}function X(e,t){if(e==null||typeof e!="object"||Array.isArray(e)||Object.getPrototypeOf(e)!==Object.prototype)throw new TypeError(`sign-time review: ${t} must be a plain object`);return e}function be(e,t){if(e==null||e==="")throw new TypeError(`sign-time review: ${t} required`);return e}function ne(e,t){let r=String(be(e,t)).toLowerCase();if(!Bi.test(r))throw new TypeError(`sign-time review: ${t} must be an EVM address`);return r}function q(e,t,{positive:r=!1}={}){try{let n=BigInt(be(e,t));if(n<0n||r&&n===0n)throw new Error;return n.toString()}catch{throw new TypeError(`sign-time review: ${t} must be an unsigned integer`)}}function qt(e,t){if(typeof e!="string"||e.length===0||e.length>500||e!==e.trim())throw new TypeError(`sign-time review: ${t} must be non-empty text`);return e}function ln(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))ln(t);Object.freeze(e)}return e}function Hi(e,t){if(typeof e=="boolean")return{passed:e,reason:e?"passed":"failed"};X(e,t);let r=e.passed??e.ok??e.allowed;if(typeof r!="boolean")throw new TypeError(`sign-time review: ${t} needs a boolean result`);let n=e.reason??e.message??e.name??(r?"passed":"failed");return{...e,passed:r,reason:qt(String(n),`${t}.reason`)}}function zi(e){if(!Array.isArray(e))throw new TypeError("sign-time review: policyChecks must be an array");let t=e.map((n,o)=>Hi(n,`policyChecks[${o}]`)),r=t.filter(n=>!n.passed);return{checks:t,passed:t.length-r.length,failed:r.length,reasons:r.map(n=>n.reason)}}function Ui(e){if(e==null)return null;if(X(e,"simulation"),typeof e.status!="string"||!["ok","success","failed","error","unavailable","unknown"].includes(e.status))throw new TypeError("sign-time review: simulation.status is invalid");if(e.willRevert!==!0&&e.willRevert!==!1&&e.willRevert!==null)throw new TypeError("sign-time review: simulation.willRevert must be boolean or null");let t={status:e.status,willRevert:e.willRevert??null,summary:qt(String(e.summary??"simulation result recorded"),"simulation.summary")};return e.gasEstimate!=null&&(t.gasEstimate=q(e.gasEstimate,"simulation.gasEstimate")),e.gasLimit!=null&&(t.gasLimit=q(e.gasLimit,"simulation.gasLimit")),t}function Wi(e){if(e==null)return null;if(!Array.isArray(e)||e.length===0)throw new TypeError("sign-time review: assetDeltas must be a non-empty array");return e.map((t,r)=>{X(t,`assetDeltas[${r}]`);let n=q(t.before,`assetDeltas[${r}].before`),o=q(t.after,`assetDeltas[${r}].after`),i=(BigInt(o)-BigInt(n)).toString(),s;try{s=t.delta==null?i:BigInt(t.delta).toString()}catch{throw new TypeError(`sign-time review: assetDeltas[${r}].delta must be an integer`)}if(s!==i)throw new TypeError(`sign-time review: assetDeltas[${r}].delta does not match before/after`);return{...t,asset:qt(String(be(t.asset??t.token,`assetDeltas[${r}].asset`)),`assetDeltas[${r}].asset`),before:n,after:o,delta:s}})}function Vi(e){if(e==null)return[];if(!Array.isArray(e))throw new TypeError("sign-time review: approvalDeltas must be an array");return e.map((t,r)=>{X(t,`approvalDeltas[${r}]`);let n=q(t.amount??t.after,`approvalDeltas[${r}].amount`);if(t.revokeLike!=null&&typeof t.revokeLike!="boolean")throw new TypeError(`sign-time review: approvalDeltas[${r}].revokeLike must be boolean`);return{token:ne(t.token,`approvalDeltas[${r}].token`),spender:ne(t.spender,`approvalDeltas[${r}].spender`),owner:ne(t.owner,`approvalDeltas[${r}].owner`),amount:n,revokeLike:t.revokeLike??BigInt(n)===0n}})}function dn(e={}){X(e,"input");let t=Ft(e),r=t.tx==null?t:X(t.tx,"tx"),n=q(t.chainId??r.chainId,"chainId",{positive:!0}),o=ne(t.account??t.from??r.from,"account/from"),i=ne(t.destination??t.to??r.to,"destination/to"),s=String(be(t.prepareHash,"prepareHash")).toLowerCase();if(!ji.test(s))throw new TypeError("sign-time review: prepareHash must be a 32-byte hash");let l=t.route??t.venue;if(l==null)throw new TypeError("sign-time review: route/venue required");let c=t.decodedCalldata??t.decodedAction;if(c==null)throw new TypeError("sign-time review: decodedCalldata or decodedAction required");let f=String(be(t.calldata??t.data??r.data,"calldata/data")).toLowerCase();if(!Di.test(f))throw new TypeError("sign-time review: calldata/data must be even-length hex");let a=t.policyChecks!==void 0&&t.policyChecks!==null,d=zi(a?t.policyChecks:[]),m=Ui(t.simulation),p=Wi(t.assetDeltas),h=Vi(t.approvalDeltas),w=t.allowlistHits??[];if(!Array.isArray(w))throw new TypeError("sign-time review: allowlistHits must be an array");let y=m?.willRevert===!0||["failed","error"].includes(m?.status),v=m!=null&&m.willRevert===!1&&["ok","success"].includes(m.status),$=y||d.failed>0?"BLOCKED":v&&a&&d.checks.length>0&&p!=null?"READY":"UNKNOWN",_=typeof c=="string"?c:c.method??c.action??c.type??"transaction",P=`${$}: review ${_} on chain ${n}; policy ${d.passed} passed, ${d.failed} failed; ${p?.length??0} asset delta${p?.length===1?"":"s"}; local signature required`,U={reviewVersion:1,status:$,requiresLocalSignature:!0,signingLocal:!0,custody:"none",execution:"review-only",chainId:n,account:o,from:o,route:l,venue:t.venue??(typeof l=="string"?l:l.venue??l.provider??null),destination:i,to:i,...t.spender==null?{}:{spender:ne(t.spender,"spender")},prepareHash:s,...t.decodedCalldata!==void 0?{decodedCalldata:t.decodedCalldata}:{decodedAction:t.decodedAction},calldata:f,data:f,selector:f.length>=10?f.slice(0,10):null,value:q(t.value??r.value??0,"value"),...(t.gasEstimate??r.gasEstimate)==null?{}:{gasEstimate:q(t.gasEstimate??r.gasEstimate,"gasEstimate")},...(t.gasLimit??r.gasLimit)==null?{}:{gasLimit:q(t.gasLimit??r.gasLimit,"gasLimit")},simulation:m,policyChecks:d,allowlistHits:w,assetDeltas:p,approvalDeltas:h,summary:P};return ln(U)}var Pi,Bi,Di,ji,Fi,qi,Mi,ye,Mt=u(()=>{Pi=1,Bi=/^0x[0-9a-f]{40}$/,Di=/^0x(?:[0-9a-f]{2})*$/,ji=/^(?:0x)?[0-9a-f]{64}$/,Fi=/(privatekey|privkey|secretkey|seedphrase|mnemonic|passphrase|password|keystore|keymaterial|wif|xprv|xpriv|bearer|authorization|signature|apikey|credential)/i,qi=/\b(?:[5KL][1-9A-HJ-NP-Za-km-z]{50,51}|xprv[0-9A-Za-z]{50,})\b/,Mi=new Set([12,15,18,21,24]),ye=class extends Error{constructor(t){super(`sign-time review refused: secret-bearing field at ${t}`),this.name="SignTimeReviewSecretError",this.code="SIGN_TIME_REVIEW_SECRET"}}});import{readFileSync as mp,readdirSync as wp,existsSync as Ki}from"node:fs";import{dirname as Ji,join as Ee}from"node:path";import{fileURLToPath as Gi}from"node:url";function Yi(){let e=[Ee(xe,"descriptors"),Ee(xe,"clear-sign","descriptors"),Ee(xe,"..","clear-sign","descriptors"),Ee(xe,"..","..","clear-sign","descriptors"),Ee(xe,"..","..","..","clear-sign","descriptors")];for(let t of e)if(Ki(t))return t;return e[0]}var xe,bp,Ep,pn=u(()=>{J();xe=Ji(Gi(import.meta.url));bp=Yi(),Ep=(1n<<256n)-1n});var mn=u(()=>{Mt();J();pn()});import{Wallet as Tp}from"ethers";import{base58 as Cp}from"@scure/base";import{ed25519 as Rp}from"@noble/curves/ed25519.js";import{NETWORK as $p,TEST_NETWORK as Pp,WIF as Bp,p2wpkh as Dp}from"@scure/btc-signer";import{pubECDSA as Fp}from"@scure/btc-signer/utils.js";var wn=u(()=>{});var Hp,zp,Up,Wp,Vp,Kp,Jp,Gp,Yp,Xp,Zp,hn=u(()=>{jt();Hp=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),zp=Object.freeze(["binance","bybit","okx","coinbase"]),Up=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),Wp=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),Vp=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),Kp=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),Jp=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),Gp=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),Yp=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),Xp=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),Zp=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"})});var gn=u(()=>{re()});var Qi,yn,Ve=u(()=>{Qi=Object.freeze({binance:Object.freeze({create:["POST","/api/v3/order"],cancel:["DELETE","/api/v3/order"],status:["GET","/api/v3/order"]}),bybit:Object.freeze({create:["POST","/v5/order/create"],cancel:["POST","/v5/order/cancel"],status:["GET","/v5/order/realtime"]}),okx:Object.freeze({create:["POST","/api/v5/trade/order"],cancel:["POST","/api/v5/trade/cancel-order"],status:["GET","/api/v5/trade/order"]}),coinbase:Object.freeze({create:["POST","/orders"],cancel:["DELETE","/orders/{order_id}"],status:["GET","/orders/{order_id}"]})}),yn=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"})});var bn=u(()=>{Ve()});var cm,En=u(()=>{Ve();bn();cm=256*1024});var xn=u(()=>{Ve();En()});var Sn=u(()=>{re()});import N from"node:path";import es from"node:os";import{createHash as ts,randomBytes as rw}from"node:crypto";import{Interface as Ht,keccak256 as ow}from"ethers";import{Transaction as sw}from"@scure/btc-signer";import{ed25519 as cw}from"@noble/curves/ed25519.js";function An(e){let t=process.env.ORACLE_SIGNER_STATE_DIR||N.join(process.env.XDG_STATE_HOME||N.join(es.homedir(),".local","state"),"oracle"),r=ts("sha256").update(N.resolve(e)).digest("hex").slice(0,16);return{vault:N.join(e,"vault.json"),policy:N.join(e,"signer-policy.json"),policyKey:N.join(e,"policy-integrity-key"),policyAnchor:N.join(t,`signer-policy-${r}.high-water`),ledger:N.join(e,"signer-ledger.json"),ledgerAnchor:N.join(t,`signer-ledger-${r}.high-water`),executionOutbox:N.join(e,"signer-execution-outbox.json"),cexOrders:N.join(e,"cex-orders.json"),cexOrdersAnchor:N.join(t,`cex-orders-${r}.high-water`),token:N.join(e,"signer-token"),lock:N.join(t,`signer-${r}.lock`),workflowLedger:N.join(e,"workflow-events.jsonl")}}var Fw,qw,Mw,vn=u(()=>{Lr();Pr();tn();rn();we();re();nn();jt();un();J();mn();Me();$e();vt();yt();Et();qe();At();bt();St();at();ct();xt();wn();hn();gn();xn();Sn();Fw=new Ht(["function collection() view returns (address)","function token() view returns (address)","function robinhoodSwapFeeWei() view returns (uint256)","function quoteSpecificBuy(uint256 tokenId) view returns (uint256 totalCost,uint256 baseCost,uint256 fee,uint256 protocolFee,bool available)","function quoteSellNFT() view returns (uint256 netPayout,uint256 grossPayout,uint256 fee,uint256 protocolFee)","function inventory(uint256 tokenId) view returns (bool)","function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),qw=new Ht(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),Mw=new Ht(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"])});import zt from"node:fs";import In from"node:path";import{homedir as rs}from"node:os";function ns(){return process.env.ORACLE_CONFIG_DIR||In.join(rs(),".config","oracle")}function Se(){let e=An(In.join(ns(),"signer")),t=zt.existsSync(e.vault),r=zt.existsSync(e.lock),n=t?r?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:t,policyConfigured:zt.existsSync(e.policy),armed:t&&!r,disarmed:r,capabilities:{swap:n,bridge:n},autonomous:!1,note:"Keys stay on this machine. Exact confirmation is required before any broadcast."}}var Zw,Ut=u(()=>{rt();sr();vn();re();Zw=Object.freeze([{type:"function",function:{name:"vault_status",description:"Read local Oracle vault/signer readiness. Never returns key material.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_status",description:"Ping the loopback signer. Fails closed if it is not running.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_pending",description:"List pending local-signer artifacts. Read-only. Does not approve, sign, or broadcast.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"signer_queue",description:"Queue a prepared unsigned artifact on the loopback signer. Does not broadcast.",parameters:{type:"object",properties:{artifact:{type:"object"}},required:["artifact"],additionalProperties:!1}}},{type:"function",function:{name:"signer_deny",description:"Drop one pending local-signer artifact. Nothing signed.",parameters:{type:"object",properties:{id:{type:"string"},digest:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"signer_execute",description:"Broadcast one already-confirmed local artifact. Requires a one-use confirmationNonce from the local signer TTY confirm. Cannot mint confirmation itself.",parameters:{type:"object",properties:{artifact:{type:"object"},confirmationNonce:{type:"string",minLength:32,maxLength:128}},required:["artifact","confirmationNonce"],additionalProperties:!1}}},{type:"function",function:{name:"signer_disarm",description:"Global kill switch. Stops the local signer from broadcasting.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"receipt_report",description:"Receipt or it did not happen. Requires transactionHash/hash/txid.",parameters:{type:"object",properties:{receipt:{type:"object"},transactionHash:{type:"string"},hash:{type:"string"},txid:{type:"string"}},additionalProperties:!1}}},{type:"function",function:{name:"watch_create",description:"Create an alert-only watch. Never execute.",parameters:{type:"object",properties:{chain:{type:"string"},token:{type:"string"},condition:{type:"string"},note:{type:"string"}},required:["chain","token","condition"],additionalProperties:!1}}},{type:"function",function:{name:"watch_list",description:"List local alert-only watches.",parameters:{type:"object",properties:{},additionalProperties:!1}}},{type:"function",function:{name:"portfolio_snapshot",description:"How to read the one portfolio snapshot. knownUsd is incomplete if a provider is missing.",parameters:{type:"object",properties:{},additionalProperties:!1}}}])});import Ke from"node:fs";import os from"node:os";import ie from"node:path";import{fileURLToPath as is}from"node:url";function kn(){return process.env.ORACLE_FAKE_HOME||os.homedir()}function as(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function Je(){return as()?process.env.ORACLE_CONFIG_DIR||ie.join(kn(),".config","oracle"):ie.join(kn(),".config","oracle")}function cs(){return ie.join(Je(),"desk.json")}function us(){return ie.join(Je(),"env")}function oe({force:e=!1}={}){if(oe._done&&!e)return oe._result||null;oe._done=!0;let t={},r=(o,i)=>{if(i==null)return;let s=String(i).trim();s&&(process.env[o]!=null&&String(process.env[o]).trim()!==""||(process.env[o]=s,t[o]=s))};try{let o=us();if(Ke.existsSync(o))for(let i of Ke.readFileSync(o,"utf8").split(/\r?\n/)){let s=i.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!s||s[2].startsWith("#"))continue;let l=s[2];(l.startsWith('"')&&l.endsWith('"')||l.startsWith("'")&&l.endsWith("'"))&&(l=l.slice(1,-1)),r(s[1],l)}}catch{}try{let o=cs();if(Ke.existsSync(o)){let i=JSON.parse(Ke.readFileSync(o,"utf8"));i&&typeof i=="object"&&(r("ORACLE_DESK_URL",i.deskUrl||i.dataUrl||i.url),r("ORACLE_DATA_URL",i.dataUrl||i.deskUrl||i.url),r("ORACLE_API_URL",i.apiUrl||i.dataUrl||i.deskUrl),r("ORACLE_PUBLIC_URL",i.publicUrl||i.deskUrl||i.dataUrl),r("ORACLE_EXEC_URL",i.execUrl),r("MAD_DESK_URL",i.deskUrl||i.dataUrl))}}catch{}let n=process.env.ORACLE_DESK_URL||process.env.ORACLE_DATA_URL||"";return n&&(r("ORACLE_DESK_URL",n),r("ORACLE_DATA_URL",n),r("ORACLE_API_URL",n),r("ORACLE_PUBLIC_URL",n),r("MAD_DESK_URL",n)),oe._result=Object.keys(t).length?t:null,oe._result}var ss,oh,On=u(()=>{ss=ie.dirname(is(import.meta.url)),oh=ie.resolve(ss,"../..");try{oe()}catch{}});function Ge(e){return String(e||"").trim()||void 0}function ds(e,{required:t=!1}={}){let r=Ge(e)?.toLowerCase();if(!r){if(t)throw new Error("model provider is required");return}if(!ls.has(r))throw new Error(`unsupported provider: ${r}`);return r}function fs(e,{required:t=!1}={}){let r=Ge(e);if(!r){if(t)throw new Error("model is required");return}if(r.includes("..")||r.startsWith("/")||!/^[a-zA-Z0-9._:/-]{1,200}$/.test(r))throw new Error("invalid model id");return r}function ps(e){let t=Ge(e);if(!t||t.length>2048)throw new Error("invalid custom base URL");let r;try{r=new URL(t)}catch{throw new Error("invalid custom base URL")}let n=r.hostname.toLowerCase().replace(/^\[|\]$/g,""),o=n==="localhost"||n==="127.0.0.1"||n==="::1";if(r.protocol!=="https:"&&!(r.protocol==="http:"&&o)||r.username||r.password||r.search||r.hash)throw new Error("custom base URL must use HTTPS or loopback HTTP without credentials, query, or fragment");return r.toString().replace(/\/+$/,"")}function Tn({provider:e,model:t,baseUrl:r}={},{requireModel:n=!1}={}){let o=ds(e),i=fs(t,{required:n});if(o==="custom")return{provider:o,...i?{model:i}:{},baseUrl:ps(r)};if(Ge(r))throw new Error("baseUrl is only supported for the custom provider");return{...o?{provider:o}:{},...i?{model:i}:{}}}var ls,Nn=u(()=>{ls=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","qwen","glm","local","ollama","custom","anthropic-oauth","openai-codex","xai-oauth"])});import Cn from"node:fs";import ms from"node:path";function hs(){return ms.join(Je(),"model.json")}function se(e){return String(e||"").trim()||void 0}function gs(e={}){let t=se(e.backend)?.toLowerCase()||"auto",r=Tn({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:t==="standalone"}),n=se(e.apiKeyEnv),o=Number.parseInt(String(e.contextLength||""),10),i=Object.fromEntries(Object.entries(e.contextByModel||{}).filter(([,a])=>Number.isSafeInteger(a)&&a>0)),s=se(e.reasoningEffort),l=se(e.computeHost||e.remoteHost),c=se(e.computeUser||e.remoteUser),f=se(e.computePath||e.remotePath);if(!ws.has(t))throw new Error(`unsupported backend: ${t}`);if(process.env.ORACLE_PUBLIC_DESKTOP==="1"&&["remote","arch"].includes(t))throw new Error("remote compute backends are disabled in the public desktop");if(n&&!/^[A-Z][A-Z0-9_]*$/.test(n))throw new Error("api key env must be an uppercase environment variable name");if(t==="remote"&&!l)throw new Error("remote backend requires computeHost");return{backend:t,...r,...n?{apiKeyEnv:n}:{},...Number.isFinite(o)&&o>0?{contextLength:o}:{},...Object.keys(i).length?{contextByModel:i}:{},...s?{reasoningEffort:s}:{},...l?{computeHost:l}:{},...c?{computeUser:c}:{},...f?{computePath:f}:{}}}function _n(){let e=hs();if(!Cn.existsSync(e))return null;try{return gs(JSON.parse(Cn.readFileSync(e,"utf8")))}catch{return null}}var ws,Rn=u(()=>{On();Nn();ws=new Set(["auto","standalone","hermes","remote","arch"])});import{Interface as ys,getAddress as bs}from"ethers";function Wt(e,t){try{return bs(e).toLowerCase()}catch{throw new Error(`${t} must be a valid EVM address`)}}function Es(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 Vt(e){return e==null?null:Number.parseInt(String(e),16)}function Ss(e,{rpcUrl:t,env:r=process.env}={}){if(t)return t;let n=ir(e,r);return n||xs[Number(e)]||null}function vs(e){let t=String(e||""),r=t.toLowerCase();if(t!==t.trim()||!/^[a-zA-Z0-9_]+$/.test(t)||!As.test(r))throw new Error(`evm-rpc: ${t} refused \u2014 @oracle-agent/oracle is prepare-only (read RPC only; no broadcast/sign)`);return r}function Is(e){let t=new Error(e?.message||JSON.stringify(e));return t.code=e?.code,t}function ks(e){if(e?.error)throw Is(e.error);return e?.result}function Os(e,t,r){return`${e}
3
3
  ${t}
4
- ${JSON.stringify(r??[])}`}async function Ts(e,t,r){return je(e,{method:"POST",body:t,fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3,signal:r.signal})}async function Kt(e,t,r=[],n={}){let o=String(t||""),i=vs(o),s=Ss(e,n);if(!s)throw new Error(`No RPC URL for chainId ${e} (set env from chain registry rpcEnv or pass rpcUrl)`);if(i==="eth_chainid"&&n.cacheChainId!==!1){let c=Ln.get(s);if(c!=null)return c}let a=n.dedupe!==!1&&!n.signal?Os(s,o,r):null;if(a&&Ae.has(a))return Ae.get(a);let f=(async()=>{let c=await Ts(s,{jsonrpc:"2.0",id:1,method:t,params:r},n),d=ks(c);return i==="eth_chainid"&&typeof d=="string"&&Ln.set(s,d),d})();return a&&(Ae.set(a,f),f.finally(()=>{Ae.get(a)===f&&Ae.delete(a)}).catch(()=>{})),f}async function $n(e={},t={}){let r=Number(e.chainId??t.chainId??1),n=Es(e.txHash||e.hash||e.transactionHash),o=await Kt(r,"eth_getTransactionReceipt",[n],t);if(!o)return{ok:!1,chainId:r,txHash:n,status:"pending",receipt:null,reason:"receipt pending"};let i=Vt(o.status),s=i===1,l=i===1?"success":i===0?"reverted":"unknown",a=s?null:l==="reverted"?"transaction reverted":"unknown receipt status",f=e.expectedTo?Wt(e.expectedTo,"expectedTo"):null,c=o.to?Wt(o.to,"receipt.to"):null;return f&&c!==f&&(s=!1,a=`to mismatch: expected ${f}, got ${c||"null"}`),{ok:s,chainId:r,txHash:n,status:l,reason:a,statusCode:i,to:c,from:o.from?Wt(o.from,"receipt.from"):null,blockNumber:Vt(o.blockNumber),transactionIndex:Vt(o.transactionIndex),logs:Array.isArray(o.logs)?o.logs:[],receipt:o}}var gh,xs,As,Ae,Ln,Pn=u(()=>{Fe();tt();gh=new ys(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);xs={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"};As=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/;Ae=new Map,Ln=new Map});function Jt(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 Gt(e,t="control input"){try{z(e,t),Yr(e)}catch(r){throw new TypeError(`${t} contains secret or custody material: ${r.message}`)}return e}function ve(e,{required:t=[],optional:r=[]}={},n="object"){Jt(e,n);let o=new Set([...t,...r]),i=Object.keys(e).filter(s=>!o.has(s));if(i.length)throw new TypeError(`${n} has unknown field ${i[0]}`);for(let s of t)if(!Object.hasOwn(e,s))throw new TypeError(`${n}.${s} is required`);return e}function Yt(e,t,r=200,{lower:n=!1}={}){if(typeof e!="string"||!e.trim()||e.length>r||Ns.test(e))throw new TypeError(`${t} must be non-empty control-free text up to ${r} characters`);let o=e.trim();return n?o.toLowerCase():o}function Ie(e,t,r=80){let n=Yt(e,t,r,{lower:!0});if(!/^[a-z0-9][a-z0-9._:-]*$/.test(n))throw new TypeError(`${t} must be a lowercase identifier`);return n}function Ye(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 L(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))L(t);Object.freeze(e)}return e}var Ns,Xt=u(()=>{ge();Lt();Ns=/[\u0000-\u001f\u007f]/});function Bn({family:e,chainId:t},r="chain"){let n=Ie(e,`${r}.family`,40),o;if(n==="evm"){if(typeof t=="number")o=String(Ye(t,`${r}.chainId`,{positive:!0}));else if(o=Yt(t,`${r}.chainId`,40),!/^[1-9][0-9]*$/.test(o))throw new TypeError(`${r}.chainId must be a positive decimal EVM chain id`)}else o=Ie(t,`${r}.chainId`,80);return{family:n,chainId:o}}function Rs(e,t="chain"){return ve(e,{required:["family","chainId"]},t),L(Bn(e,t))}function Dn(e,t="finality rule"){Gt(e,t),Jt(e,t);let r=e.rule;if(!Cs.includes(r))throw new TypeError(`${t}.rule must be confirmations, finalizedTag, or checkpoint`);let n=r==="confirmations"?"confirmations":r;ve(e,{required:["family","chainId","rule",n]},t);let o=Bn(e,t);return r==="confirmations"?{...o,rule:r,confirmations:Ye(e.confirmations,`${t}.confirmations`,{positive:!0})}:{...o,rule:r,[n]:Ie(e[n],`${t}.${n}`,80)}}function Zt(e){if(!Array.isArray(e))throw new TypeError("finality policy rules must be an array");let t=e.map((n,o)=>Dn(n,`finality policy rule ${o}`)),r=new Set;for(let n of t){let o=`${n.family}\0${n.chainId}`;if(r.has(o))throw new TypeError(`duplicate finality rule for ${n.family}:${n.chainId}`);r.add(o)}return L({policyVersion:1,rules:t})}function Ls(e){if(ve(e,{required:["policyVersion","rules"]},"finality policy"),e.policyVersion!==1||!Array.isArray(e.rules))throw new TypeError("unsupported finality policy");return Zt(e.rules)}function jn(e,t){let r=Rs(t,"finality query"),o=Ls(e).rules.find(i=>i.family===r.family&&i.chainId===r.chainId);return o?L({status:"KNOWN",...r,rule:o}):L({status:Z.UNKNOWN,reason:"MISSING_FINALITY_RULE",...r,rule:null})}function $s(e,t){if(e==null)return null;Gt(e,"finality evidence");let r=t.rule==="confirmations"?"confirmations":t.rule;if(ve(e,{required:["status"],optional:[r]},"finality evidence"),!_s.includes(e.status))throw new TypeError("finality evidence.status is unknown");let n={status:e.status};return e[r]!=null&&(n[r]=t.rule==="confirmations"?Ye(e.confirmations,"finality evidence.confirmations",{positive:!0}):Ie(e[r],`finality evidence.${r}`,80)),n}function Fn(e,t){if(!e||e.status===Z.UNKNOWN||e.rule==null)return L({status:Z.UNKNOWN,final:!1,reason:"MISSING_FINALITY_RULE"});let r=Dn(e.rule??e,"resolved finality rule"),n=$s(t,r);if(n==null)return L({status:Z.UNKNOWN,final:!1,reason:"MISSING_FINALITY_EVIDENCE"});if(n.status!=="LIVE")return L({status:Z.UNKNOWN,final:!1,reason:`${n.status}_EVIDENCE`});let o=!1;return r.rule==="confirmations"?o=n.confirmations!=null&&n.confirmations>=r.confirmations:r.rule==="finalizedTag"?o=n.finalizedTag===r.finalizedTag:o=n.checkpoint===r.checkpoint,L({status:o?Z.FINAL:Z.INCLUDED,final:o,reason:o?"PINNED_RULE_SATISFIED":"PINNED_RULE_NOT_SATISFIED",rule:r})}var Cs,Z,_s,qn=u(()=>{Xt();Cs=Object.freeze(["confirmations","finalizedTag","checkpoint"]),Z=Object.freeze({UNKNOWN:"UNKNOWN",INCLUDED:"INCLUDED",FINAL:"FINAL"}),_s=Object.freeze(["LIVE","STALE","UNKNOWN","UNAVAILABLE"])});function Bs(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 Mn(e){return typeof e=="string"&&["FAIL","FAILED","FAILURE","ORPHAN","ORPHANED","REVERTED"].includes(e.trim().toUpperCase())}function er(e){return e==null?e:Array.isArray(e)?e.map(er):ke(e)?Object.fromEntries(Object.keys(e).sort().map(t=>[t,er(e[t])])):String(e)}function Ds(e,t,r,n){let o=x(e.finalityEvidence,n?.finality,e.evidence),i=x(e.finalityPolicy,e.policy);try{return i==null&&ke(e.finalityRule)&&(i=Zt([{family:t,chainId:r,...e.finalityRule}])),i==null||t==null||r==null?{status:"UNKNOWN",final:!1,reason:"MISSING_FINALITY_RULE"}:Fn(jn(i,{family:t,chainId:r}),o)}catch{return{status:"UNKNOWN",final:!1,reason:"MALFORMED_FINALITY_EVIDENCE"}}}function C(e,t,r){r!=null&&(e[t]=r)}function js(e){return e==null?null:String(e).trim().toLowerCase()}function Qt(...e){let t=e.map(js).filter(Boolean);return t.length<=1||t.every(r=>r===t[0])}function Hn(e={}){if(!ke(e))throw new TypeError("verified receipt: input object required");let t=He(e),r=x(t.actionReceipt,t.receipt),n=ke(r)?r:t,o=x(t.observation,t.chainObservation,t.observedReceipt),i=ke(o),s=x(t.txHash,n.txHash,n.transactionHash,o?.txHash,o?.transactionHash),l=x(t.family,n.family,n.chain?.family,o?.family,o?.chain?.family),a=x(t.chainId,n.chainId,n.chain?.chainId,o?.chainId,o?.chain?.chainId),f=!Qt(t.txHash,n.txHash,n.transactionHash,o?.txHash,o?.transactionHash)||!Qt(t.family,n.family,n.chain?.family,o?.family,o?.chain?.family)||!Qt(t.chainId,n.chainId,n.chain?.chainId,o?.chainId,o?.chain?.chainId),c=Ds(t,l,a,i&&!f?o:null),d=Bs(x(o?.receiptStatus,o?.executionStatus,o?.status)),m=x(t.reconciliationStatus,t.reconciliation?.status,o?.reconciliationStatus),p=x(t.finalityState,t.finalityEvidence?.status,t.evidence?.status,o?.finalityState),h="UNKNOWN";Mn(m)||!f&&(i&&d==="FAIL"||Mn(p))?h="FAIL":!f&&s&&i&&d==="SUCCESS"&&["INCLUDED","FINAL"].includes(c.status)&&(h="SUCCESS");let w={verifiedReceiptVersion:Ps,status:h};f&&(w.reason="REFERENCE_MISMATCH"),C(w,"txHash",s),C(w,"chain",x(t.chain,n.chain,o?.chain)),C(w,"family",l),C(w,"chainId",a),C(w,"block",x(o?.block,t.block)),C(w,"blockState",x(o?.blockState,o?.inclusionState)),w.finalityState=c.status,C(w,"confirmations",x(o?.confirmations,o?.finality?.confirmations,t.finalityEvidence?.confirmations,t.evidence?.confirmations)),C(w,"observedAt",x(o?.observedAt,t.observedAt)),C(w,"route",x(t.route,n.route)),C(w,"prepareHash",x(t.prepareHash,n.prepareHash)),C(w,"policyOutcome",x(t.policyOutcome,n.policyOutcome,n.policyChecks));let y=x(t.balanceChanges,o?.balanceChanges,o?.balances,n.balanceChanges,n.balances);return y!=null&&(w.balanceChanges=er(y)),C(w,"createdAt",x(t.createdAt,n.createdAt)),C(w,"submittedAt",x(t.submittedAt,n.submittedAt)),C(w,"finalizedAt",x(t.finalizedAt,o?.finalizedAt)),C(w,"timestamps",x(t.timestamps,n.timestamps,o?.timestamps)),L(w)}var Ps,Th,x,ke,zn=u(()=>{ge();qn();Xt();Ps=1,Th=Object.freeze(["SUCCESS","FAIL","UNKNOWN"]),x=(...e)=>e.find(t=>t!=null),ke=e=>!!e&&typeof e=="object"&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype});var Wn={};Ne(Wn,{observeEvmReceipt:()=>Un,verifyEvmReceipt:()=>Ms});function qs(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 Un({txHash:e,chainId:t,rpcUrl:r},n={}){let o=String(e||"").trim().toLowerCase();if(!Fs.test(o))throw new TypeError("observe receipt: txHash must be a 32-byte hash");let i=Number(t);if(!Number.isSafeInteger(i)||i<=0)throw new TypeError("observe receipt: chainId required");let s=n.transactionReceipt||$n,l=n.rpcCall||Kt,a={...n.rpcOptions||{},...r?{rpcUrl:r}:{}},f;try{f=await s({txHash:o,chainId:i},a)}catch(p){return{observation:null,reason:`RPC_UNAVAILABLE: ${p.message}`}}if(!f||f.receipt==null)return{observation:null,reason:f?.reason||"receipt pending"};let c=null,d=f.blockNumber;if(Number.isSafeInteger(d))try{let p=qs(await l(i,"eth_blockNumber",[],a));p!=null&&p>=d&&(c=p-d+1)}catch{}let m={txHash:o,family:"evm",chainId:String(i),receiptStatus:f.status==="success"?"SUCCESS":f.status==="reverted"?"FAIL":"UNKNOWN",block:d==null?void 0:String(d),observedAt:new Date().toISOString(),finality:{status:"LIVE",...c==null?{}:{confirmations:c}}};return c!=null&&(m.confirmations=c),{observation:m,reason:null}}async function Ms({txHash:e,chainId:t,confirmations:r=1,rpcUrl:n},o={}){let{observation:i,reason:s}=await Un({txHash:e,chainId:t,rpcUrl:n},o),l=Hn({txHash:String(e).trim().toLowerCase(),family:"evm",chainId:String(Number(t)),finalityRule:{rule:"confirmations",confirmations:r},...i?{observation:i}:{}});return{receipt:l,observed:!!i,final:l.finalityState==="FINAL",requiredConfirmations:r,reason:s}}var Fs,Vn=u(()=>{Pn();zn();Fs=/^0x[0-9a-f]{64}$/});var Kn={};Ne(Kn,{classifyReceipt:()=>de,configDir:()=>Ws,firstHourReport:()=>Oe,probeReceiptModule:()=>Ks,probeReviewModule:()=>Vs,venueMap:()=>Xe});import Hs from"node:path";import{homedir as zs}from"node:os";function Ws(e=process.env){return e.ORACLE_CONFIG_DIR||Hs.join(zs(),".config","oracle")}function Xe({env:e=process.env,vault:t=null}={}){let r=t||Se(),n=[];for(let[o,i]of Object.entries(Ce)){let s=(i.rpcEnv||[]).some(a=>String(e[a]||"").trim()),l="prepare";i.evm?s&&(l="live"):l="unavailable",n.push({key:o,chainId:i.chainId,name:i.name,family:"evm",status:l,execute:!!(r.vaultExists&&r.armed&&!r.disarmed),note:s?"rpc configured":"public read/prepare; set RPC for live reads"})}return n.push({key:"solana",chainId:null,name:"Solana",family:"sol",status:"prepare",execute:!1,note:"Jupiter quote/prepare; local sol signer"},{key:"bitcoin",chainId:null,name:"Bitcoin",family:"btc",status:"prepare",execute:!1,note:"Esplora read; local btc signer"},{key:"hyperliquid-l1",chainId:null,name:"Hyperliquid L1",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not an EVM signer family"},{key:"polymarket",chainId:null,name:"Polymarket",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not a signer family"}),n}function Oe({env:e=process.env,model:t=_n(),vault:r=Se(),signerReachable:n=!1,quote:o=null,reviewAvailable:i=!1,receiptAvailable:s=!1}={}){let l=[],a=(p,h,w,y=null)=>l.push({id:p,status:h,detail:w,fix:y}),f=(()=>{let[p,h]=process.versions.node.split(".").map(Number);return p>20||p===20&&h>=19})();a("node",f?"ok":"fail",`node ${process.versions.node}`,f?null:"install node >= 20.19"),t?t.backend==="hermes"?a("model","warn","backend=hermes (opt-in attach)","oracle model --backend standalone"):a("model","ok",`${t.backend||"auto"} ${t.provider||""} ${t.model||""}`.trim()):a("model","fail","no model.json","oracle setup model"),r.vaultExists?r.disarmed?a("vault","warn","vault present, DISARMED","oracle signer (re-arm after confirm)"):a("vault",r.armed?"ok":"warn",r.armed?"present, armed":"present, not armed"):a("vault","fail","no local vault","oracle sign init");let c=e.ORACLE_SIGNER_HOST||"127.0.0.1";if(Us.has(c)?a("signer",n?"ok":"warn",n?`loopback ${c}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",n?null:"oracle signer"):a("signer","fail",`signer host ${c} is not loopback`,"unset ORACLE_SIGNER_HOST"),!o)a("quote","warn","quote not probed",null);else if(o.ok){let p=String(o.detail||"net quote returned");a("quote","ok",p.length>140?`${p.slice(0,140)}\u2026`:p)}else a("quote","warn",o.detail||"quote unavailable","check network / oracle data serve");a("review",i?"ok":"fail",i?"sign-time review renders decoded action, policy hits, approval deltas":"sign-time review module missing from this build",i?null:"reinstall @oracle-agent/oracle (src/control/sign-time-review.mjs)"),a("receipt",s?"ok":"fail",s?"oracle receipt verifies on-chain state (SUCCESS/FAIL/UNKNOWN, finality-pinned)":"verified-receipt observer missing from this build",s?null:"reinstall @oracle-agent/oracle (src/desk/observe-receipt.mjs)");let d=l.some(p=>p.status==="fail"),m=l.filter(p=>p.status==="ok").length;return{ok:!d,checks:l,firstRunScore:{ok:m,total:l.length,label:`${m}/${l.length} first-run hops green`},venues:Xe({env:e,vault:r})}}async function Vs(){try{return typeof(await Promise.resolve().then(()=>(Mt(),fn))).createSignTimeReview=="function"}catch{return!1}}async function Ks(){try{let e=await Promise.resolve().then(()=>(Vn(),Wn));return typeof e.observeReceipt=="function"||typeof e.default=="function"||Object.values(e).some(t=>typeof t=="function")}catch{return!1}}var Us,Ze=u(()=>{tt();Ut();Rn();rt();Us=new Set(["127.0.0.1","::1","localhost"])});var Gn={};Ne(Gn,{classifyReceipt:()=>de,default:()=>Ys,detailText:()=>Jn,firstHourReport:()=>Oe,probeQuote:()=>Gs,probeSigner:()=>Js,symbol:()=>Te,vaultStatus:()=>Se});async function Js(e=process.env){let t=e.ORACLE_SIGNER_HOST||"127.0.0.1",r=e.ORACLE_SIGNER_PORT||9462;try{return(await fetch(`http://${t}:${r}/status`,{signal:AbortSignal.timeout(1500)})).ok}catch{return!1}}function Te(e){let t=String(e??"?").replace(/[^\w.$-]/g,"");return t.length>12?`${t.slice(0,12)}...`:t||"?"}function Jn(e,t=120){let r=String(e??"").replace(/[\u0000-\u001f\u007f-\u009f]/g," ").replace(/\s+/g," ").trim();return r?r.length>t?`${r.slice(0,t)}...`:r:"quote failed"}async function Gs(){try{let e=await fetch("https://api.dexscreener.com/latest/dex/search?q=WETH%20USDC",{signal:AbortSignal.timeout(4e3)});if(!e.ok)return{ok:!1,detail:`dexscreener ${e.status}`};let r=(await e.json())?.pairs?.[0];return!r?.chainId||!r?.priceUsd?{ok:!1,detail:"no pair"}:{ok:!0,detail:`${Te(r.chainId)} ${Te(r.baseToken?.symbol)}/${Te(r.quoteToken?.symbol)} $${Te(r.priceUsd)}`}}catch(e){return{ok:!1,detail:Jn(e instanceof Error?e.message:"quote failed")}}}var Ys,Yn=u(()=>{Ze();Ut();Ys={name:"venues",summary:"label every shipped venue live / prepare / unavailable",group:"read",usage:"oracle venues [--json]",async run(e){let t=e.argv.includes("--json"),r=Xe();if(t)return process.stdout.write(`${JSON.stringify({venues:r},null,2)}
4
+ ${JSON.stringify(r??[])}`}async function Ts(e,t,r){return je(e,{method:"POST",body:t,fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3,signal:r.signal})}async function Kt(e,t,r=[],n={}){let o=String(t||""),i=vs(o),s=Ss(e,n);if(!s)throw new Error(`No RPC URL for chainId ${e} (set env from chain registry rpcEnv or pass rpcUrl)`);if(i==="eth_chainid"&&n.cacheChainId!==!1){let a=Ln.get(s);if(a!=null)return a}let c=n.dedupe!==!1&&!n.signal?Os(s,o,r):null;if(c&&Ae.has(c))return Ae.get(c);let f=(async()=>{let a=await Ts(s,{jsonrpc:"2.0",id:1,method:t,params:r},n),d=ks(a);return i==="eth_chainid"&&typeof d=="string"&&Ln.set(s,d),d})();return c&&(Ae.set(c,f),f.finally(()=>{Ae.get(c)===f&&Ae.delete(c)}).catch(()=>{})),f}async function $n(e={},t={}){let r=Number(e.chainId??t.chainId??1),n=Es(e.txHash||e.hash||e.transactionHash),o=await Kt(r,"eth_getTransactionReceipt",[n],t);if(!o)return{ok:!1,chainId:r,txHash:n,status:"pending",receipt:null,reason:"receipt pending"};let i=Vt(o.status),s=i===1,l=i===1?"success":i===0?"reverted":"unknown",c=s?null:l==="reverted"?"transaction reverted":"unknown receipt status",f=e.expectedTo?Wt(e.expectedTo,"expectedTo"):null,a=o.to?Wt(o.to,"receipt.to"):null;return f&&a!==f&&(s=!1,c=`to mismatch: expected ${f}, got ${a||"null"}`),{ok:s,chainId:r,txHash:n,status:l,reason:c,statusCode:i,to:a,from:o.from?Wt(o.from,"receipt.from"):null,blockNumber:Vt(o.blockNumber),transactionIndex:Vt(o.transactionIndex),logs:Array.isArray(o.logs)?o.logs:[],receipt:o}}var gh,xs,As,Ae,Ln,Pn=u(()=>{Fe();tt();gh=new ys(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);xs={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"};As=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/;Ae=new Map,Ln=new Map});function Jt(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 Gt(e,t="control input"){try{z(e,t),Yr(e)}catch(r){throw new TypeError(`${t} contains secret or custody material: ${r.message}`)}return e}function ve(e,{required:t=[],optional:r=[]}={},n="object"){Jt(e,n);let o=new Set([...t,...r]),i=Object.keys(e).filter(s=>!o.has(s));if(i.length)throw new TypeError(`${n} has unknown field ${i[0]}`);for(let s of t)if(!Object.hasOwn(e,s))throw new TypeError(`${n}.${s} is required`);return e}function Yt(e,t,r=200,{lower:n=!1}={}){if(typeof e!="string"||!e.trim()||e.length>r||Ns.test(e))throw new TypeError(`${t} must be non-empty control-free text up to ${r} characters`);let o=e.trim();return n?o.toLowerCase():o}function Ie(e,t,r=80){let n=Yt(e,t,r,{lower:!0});if(!/^[a-z0-9][a-z0-9._:-]*$/.test(n))throw new TypeError(`${t} must be a lowercase identifier`);return n}function Ye(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 L(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))L(t);Object.freeze(e)}return e}var Ns,Xt=u(()=>{ge();Lt();Ns=/[\u0000-\u001f\u007f]/});function Bn({family:e,chainId:t},r="chain"){let n=Ie(e,`${r}.family`,40),o;if(n==="evm"){if(typeof t=="number")o=String(Ye(t,`${r}.chainId`,{positive:!0}));else if(o=Yt(t,`${r}.chainId`,40),!/^[1-9][0-9]*$/.test(o))throw new TypeError(`${r}.chainId must be a positive decimal EVM chain id`)}else o=Ie(t,`${r}.chainId`,80);return{family:n,chainId:o}}function Rs(e,t="chain"){return ve(e,{required:["family","chainId"]},t),L(Bn(e,t))}function Dn(e,t="finality rule"){Gt(e,t),Jt(e,t);let r=e.rule;if(!Cs.includes(r))throw new TypeError(`${t}.rule must be confirmations, finalizedTag, or checkpoint`);let n=r==="confirmations"?"confirmations":r;ve(e,{required:["family","chainId","rule",n]},t);let o=Bn(e,t);return r==="confirmations"?{...o,rule:r,confirmations:Ye(e.confirmations,`${t}.confirmations`,{positive:!0})}:{...o,rule:r,[n]:Ie(e[n],`${t}.${n}`,80)}}function Zt(e){if(!Array.isArray(e))throw new TypeError("finality policy rules must be an array");let t=e.map((n,o)=>Dn(n,`finality policy rule ${o}`)),r=new Set;for(let n of t){let o=`${n.family}\0${n.chainId}`;if(r.has(o))throw new TypeError(`duplicate finality rule for ${n.family}:${n.chainId}`);r.add(o)}return L({policyVersion:1,rules:t})}function Ls(e){if(ve(e,{required:["policyVersion","rules"]},"finality policy"),e.policyVersion!==1||!Array.isArray(e.rules))throw new TypeError("unsupported finality policy");return Zt(e.rules)}function jn(e,t){let r=Rs(t,"finality query"),o=Ls(e).rules.find(i=>i.family===r.family&&i.chainId===r.chainId);return o?L({status:"KNOWN",...r,rule:o}):L({status:Z.UNKNOWN,reason:"MISSING_FINALITY_RULE",...r,rule:null})}function $s(e,t){if(e==null)return null;Gt(e,"finality evidence");let r=t.rule==="confirmations"?"confirmations":t.rule;if(ve(e,{required:["status"],optional:[r]},"finality evidence"),!_s.includes(e.status))throw new TypeError("finality evidence.status is unknown");let n={status:e.status};return e[r]!=null&&(n[r]=t.rule==="confirmations"?Ye(e.confirmations,"finality evidence.confirmations",{positive:!0}):Ie(e[r],`finality evidence.${r}`,80)),n}function Fn(e,t){if(!e||e.status===Z.UNKNOWN||e.rule==null)return L({status:Z.UNKNOWN,final:!1,reason:"MISSING_FINALITY_RULE"});let r=Dn(e.rule??e,"resolved finality rule"),n=$s(t,r);if(n==null)return L({status:Z.UNKNOWN,final:!1,reason:"MISSING_FINALITY_EVIDENCE"});if(n.status!=="LIVE")return L({status:Z.UNKNOWN,final:!1,reason:`${n.status}_EVIDENCE`});let o=!1;return r.rule==="confirmations"?o=n.confirmations!=null&&n.confirmations>=r.confirmations:r.rule==="finalizedTag"?o=n.finalizedTag===r.finalizedTag:o=n.checkpoint===r.checkpoint,L({status:o?Z.FINAL:Z.INCLUDED,final:o,reason:o?"PINNED_RULE_SATISFIED":"PINNED_RULE_NOT_SATISFIED",rule:r})}var Cs,Z,_s,qn=u(()=>{Xt();Cs=Object.freeze(["confirmations","finalizedTag","checkpoint"]),Z=Object.freeze({UNKNOWN:"UNKNOWN",INCLUDED:"INCLUDED",FINAL:"FINAL"}),_s=Object.freeze(["LIVE","STALE","UNKNOWN","UNAVAILABLE"])});function Bs(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 Mn(e){return typeof e=="string"&&["FAIL","FAILED","FAILURE","ORPHAN","ORPHANED","REVERTED"].includes(e.trim().toUpperCase())}function er(e){return e==null?e:Array.isArray(e)?e.map(er):ke(e)?Object.fromEntries(Object.keys(e).sort().map(t=>[t,er(e[t])])):String(e)}function Ds(e,t,r,n){let o=x(e.finalityEvidence,n?.finality,e.evidence),i=x(e.finalityPolicy,e.policy);try{return i==null&&ke(e.finalityRule)&&(i=Zt([{family:t,chainId:r,...e.finalityRule}])),i==null||t==null||r==null?{status:"UNKNOWN",final:!1,reason:"MISSING_FINALITY_RULE"}:Fn(jn(i,{family:t,chainId:r}),o)}catch{return{status:"UNKNOWN",final:!1,reason:"MALFORMED_FINALITY_EVIDENCE"}}}function C(e,t,r){r!=null&&(e[t]=r)}function js(e){return e==null?null:String(e).trim().toLowerCase()}function Qt(...e){let t=e.map(js).filter(Boolean);return t.length<=1||t.every(r=>r===t[0])}function Hn(e={}){if(!ke(e))throw new TypeError("verified receipt: input object required");let t=He(e),r=x(t.actionReceipt,t.receipt),n=ke(r)?r:t,o=x(t.observation,t.chainObservation,t.observedReceipt),i=ke(o),s=x(t.txHash,n.txHash,n.transactionHash,o?.txHash,o?.transactionHash),l=x(t.family,n.family,n.chain?.family,o?.family,o?.chain?.family),c=x(t.chainId,n.chainId,n.chain?.chainId,o?.chainId,o?.chain?.chainId),f=!Qt(t.txHash,n.txHash,n.transactionHash,o?.txHash,o?.transactionHash)||!Qt(t.family,n.family,n.chain?.family,o?.family,o?.chain?.family)||!Qt(t.chainId,n.chainId,n.chain?.chainId,o?.chainId,o?.chain?.chainId),a=Ds(t,l,c,i&&!f?o:null),d=Bs(x(o?.receiptStatus,o?.executionStatus,o?.status)),m=x(t.reconciliationStatus,t.reconciliation?.status,o?.reconciliationStatus),p=x(t.finalityState,t.finalityEvidence?.status,t.evidence?.status,o?.finalityState),h="UNKNOWN";Mn(m)||!f&&(i&&d==="FAIL"||Mn(p))?h="FAIL":!f&&s&&i&&d==="SUCCESS"&&["INCLUDED","FINAL"].includes(a.status)&&(h="SUCCESS");let w={verifiedReceiptVersion:Ps,status:h};f&&(w.reason="REFERENCE_MISMATCH"),C(w,"txHash",s),C(w,"chain",x(t.chain,n.chain,o?.chain)),C(w,"family",l),C(w,"chainId",c),C(w,"block",x(o?.block,t.block)),C(w,"blockState",x(o?.blockState,o?.inclusionState)),w.finalityState=a.status,C(w,"confirmations",x(o?.confirmations,o?.finality?.confirmations,t.finalityEvidence?.confirmations,t.evidence?.confirmations)),C(w,"observedAt",x(o?.observedAt,t.observedAt)),C(w,"route",x(t.route,n.route)),C(w,"prepareHash",x(t.prepareHash,n.prepareHash)),C(w,"policyOutcome",x(t.policyOutcome,n.policyOutcome,n.policyChecks));let y=x(t.balanceChanges,o?.balanceChanges,o?.balances,n.balanceChanges,n.balances);return y!=null&&(w.balanceChanges=er(y)),C(w,"createdAt",x(t.createdAt,n.createdAt)),C(w,"submittedAt",x(t.submittedAt,n.submittedAt)),C(w,"finalizedAt",x(t.finalizedAt,o?.finalizedAt)),C(w,"timestamps",x(t.timestamps,n.timestamps,o?.timestamps)),L(w)}var Ps,Th,x,ke,zn=u(()=>{ge();qn();Xt();Ps=1,Th=Object.freeze(["SUCCESS","FAIL","UNKNOWN"]),x=(...e)=>e.find(t=>t!=null),ke=e=>!!e&&typeof e=="object"&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype});var Wn={};Ne(Wn,{observeEvmReceipt:()=>Un,verifyEvmReceipt:()=>Ms});function qs(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 Un({txHash:e,chainId:t,rpcUrl:r},n={}){let o=String(e||"").trim().toLowerCase();if(!Fs.test(o))throw new TypeError("observe receipt: txHash must be a 32-byte hash");let i=Number(t);if(!Number.isSafeInteger(i)||i<=0)throw new TypeError("observe receipt: chainId required");let s=n.transactionReceipt||$n,l=n.rpcCall||Kt,c={...n.rpcOptions||{},...r?{rpcUrl:r}:{}},f;try{f=await s({txHash:o,chainId:i},c)}catch(p){return{observation:null,reason:`RPC_UNAVAILABLE: ${p.message}`}}if(!f||f.receipt==null)return{observation:null,reason:f?.reason||"receipt pending"};let a=null,d=f.blockNumber;if(Number.isSafeInteger(d))try{let p=qs(await l(i,"eth_blockNumber",[],c));p!=null&&p>=d&&(a=p-d+1)}catch{}let m={txHash:o,family:"evm",chainId:String(i),receiptStatus:f.status==="success"?"SUCCESS":f.status==="reverted"?"FAIL":"UNKNOWN",block:d==null?void 0:String(d),observedAt:new Date().toISOString(),finality:{status:"LIVE",...a==null?{}:{confirmations:a}}};return a!=null&&(m.confirmations=a),{observation:m,reason:null}}async function Ms({txHash:e,chainId:t,confirmations:r=1,rpcUrl:n},o={}){let{observation:i,reason:s}=await Un({txHash:e,chainId:t,rpcUrl:n},o),l=Hn({txHash:String(e).trim().toLowerCase(),family:"evm",chainId:String(Number(t)),finalityRule:{rule:"confirmations",confirmations:r},...i?{observation:i}:{}});return{receipt:l,observed:!!i,final:l.finalityState==="FINAL",requiredConfirmations:r,reason:s}}var Fs,Vn=u(()=>{Pn();zn();Fs=/^0x[0-9a-f]{64}$/});var Kn={};Ne(Kn,{classifyReceipt:()=>de,configDir:()=>Ws,firstHourReport:()=>Oe,probeReceiptModule:()=>Ks,probeReviewModule:()=>Vs,venueMap:()=>Xe});import Hs from"node:path";import{homedir as zs}from"node:os";function Ws(e=process.env){return e.ORACLE_CONFIG_DIR||Hs.join(zs(),".config","oracle")}function Xe({env:e=process.env,vault:t=null}={}){let r=t||Se(),n=[];for(let[o,i]of Object.entries(Ce)){let s=(i.rpcEnv||[]).some(c=>String(e[c]||"").trim()),l="prepare";i.evm?s&&(l="live"):l="unavailable",n.push({key:o,chainId:i.chainId,name:i.name,family:"evm",status:l,execute:!!(r.vaultExists&&r.armed&&!r.disarmed),note:s?"rpc configured":"public read/prepare; set RPC for live reads"})}return n.push({key:"solana",chainId:null,name:"Solana",family:"sol",status:"prepare",execute:!1,note:"Jupiter quote/prepare; local sol signer"},{key:"bitcoin",chainId:null,name:"Bitcoin",family:"btc",status:"prepare",execute:!1,note:"Esplora read; local btc signer"},{key:"hyperliquid-l1",chainId:null,name:"Hyperliquid L1",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not an EVM signer family"},{key:"polymarket",chainId:null,name:"Polymarket",family:"data",status:"live",execute:!1,note:"data/prepare only \u2014 not a signer family"}),n}function Oe({env:e=process.env,model:t=_n(),vault:r=Se(),signerReachable:n=!1,quote:o=null,reviewAvailable:i=!1,receiptAvailable:s=!1}={}){let l=[],c=(p,h,w,y=null)=>l.push({id:p,status:h,detail:w,fix:y}),f=(()=>{let[p,h]=process.versions.node.split(".").map(Number);return p>20||p===20&&h>=19})();c("node",f?"ok":"fail",`node ${process.versions.node}`,f?null:"install node >= 20.19"),t?t.backend==="hermes"?c("model","warn","backend=hermes (opt-in attach)","oracle model --backend standalone"):c("model","ok",`${t.backend||"auto"} ${t.provider||""} ${t.model||""}`.trim()):c("model","fail","no model.json","oracle setup model"),r.vaultExists?r.disarmed?c("vault","warn","vault present, DISARMED","oracle signer (re-arm after confirm)"):c("vault",r.armed?"ok":"warn",r.armed?"present, armed":"present, not armed"):c("vault","fail","no local vault","oracle sign init");let a=e.ORACLE_SIGNER_HOST||"127.0.0.1";if(Us.has(a)?c("signer",n?"ok":"warn",n?`loopback ${a}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",n?null:"oracle signer"):c("signer","fail",`signer host ${a} is not loopback`,"unset ORACLE_SIGNER_HOST"),!o)c("quote","warn","quote not probed",null);else if(o.ok){let p=String(o.detail||"net quote returned");c("quote","ok",p.length>140?`${p.slice(0,140)}\u2026`:p)}else c("quote","warn",o.detail||"quote unavailable","check network / oracle data serve");c("review",i?"ok":"fail",i?"sign-time review renders decoded action, policy hits, approval deltas":"sign-time review module missing from this build",i?null:"reinstall @oracle-agent/oracle (src/control/sign-time-review.mjs)"),c("receipt",s?"ok":"fail",s?"oracle receipt verifies on-chain state (SUCCESS/FAIL/UNKNOWN, finality-pinned)":"verified-receipt observer missing from this build",s?null:"reinstall @oracle-agent/oracle (src/desk/observe-receipt.mjs)");let d=l.some(p=>p.status==="fail"),m=l.filter(p=>p.status==="ok").length;return{ok:!d,checks:l,firstRunScore:{ok:m,total:l.length,label:`${m}/${l.length} first-run hops green`},venues:Xe({env:e,vault:r})}}async function Vs(){try{return typeof(await Promise.resolve().then(()=>(Mt(),fn))).createSignTimeReview=="function"}catch{return!1}}async function Ks(){try{let e=await Promise.resolve().then(()=>(Vn(),Wn));return typeof e.observeReceipt=="function"||typeof e.default=="function"||Object.values(e).some(t=>typeof t=="function")}catch{return!1}}var Us,Ze=u(()=>{tt();Ut();Rn();rt();Us=new Set(["127.0.0.1","::1","localhost"])});var Gn={};Ne(Gn,{classifyReceipt:()=>de,default:()=>Ys,detailText:()=>Jn,firstHourReport:()=>Oe,probeQuote:()=>Gs,probeSigner:()=>Js,symbol:()=>Te,vaultStatus:()=>Se});async function Js(e=process.env){let t=e.ORACLE_SIGNER_HOST||"127.0.0.1",r=e.ORACLE_SIGNER_PORT||9462;try{return(await fetch(`http://${t}:${r}/status`,{signal:AbortSignal.timeout(1500)})).ok}catch{return!1}}function Te(e){let t=String(e??"?").replace(/[^\w.$-]/g,"");return t.length>12?`${t.slice(0,12)}...`:t||"?"}function Jn(e,t=120){let r=String(e??"").replace(/[\u0000-\u001f\u007f-\u009f]/g," ").replace(/\s+/g," ").trim();return r?r.length>t?`${r.slice(0,t)}...`:r:"quote failed"}async function Gs(){try{let e=await fetch("https://api.dexscreener.com/latest/dex/search?q=WETH%20USDC",{signal:AbortSignal.timeout(4e3)});if(!e.ok)return{ok:!1,detail:`dexscreener ${e.status}`};let r=(await e.json())?.pairs?.[0];return!r?.chainId||!r?.priceUsd?{ok:!1,detail:"no pair"}:{ok:!0,detail:`${Te(r.chainId)} ${Te(r.baseToken?.symbol)}/${Te(r.quoteToken?.symbol)} $${Te(r.priceUsd)}`}}catch(e){return{ok:!1,detail:Jn(e instanceof Error?e.message:"quote failed")}}}var Ys,Yn=u(()=>{Ze();Ut();Ys={name:"venues",summary:"label every shipped venue live / prepare / unavailable",group:"read",usage:"oracle venues [--json]",async run(e){let t=e.argv.includes("--json"),r=Xe();if(t)return process.stdout.write(`${JSON.stringify({venues:r},null,2)}
5
5
  `),0;for(let n of r)process.stdout.write(`${n.status.padEnd(12)} ${n.key.padEnd(16)} ${n.name} exec=${n.execute?"local":"no"}
6
- `);return 0}}});Ze();var Xn=[{n:1,title:"quote",cmd:"oracle swap quote 8453 <tokenIn> <tokenOut> <amount> --json",note:"read-only. No wallet, no keys."},{n:2,title:"prepare",cmd:"oracle swap prepare ... --taker <yourWallet>",note:"returns an UNSIGNED transaction. Oracle never holds a key."},{n:3,title:"review",cmd:"shown before any signature",note:"decoded action, route, policy pass/fail, approval deltas, prepare hash."},{n:4,title:"sign",cmd:"your wallet, or oracle signer (local encrypted vault)",note:"you type the exact digest. Nothing signs on your behalf."},{n:5,title:"receipt",cmd:"oracle receipt --hash <txid> --chain <chainId>",note:"observed chain state only. No evidence reads UNKNOWN, never success."}],Mh={name:"quickstart",summary:"walk the first-run path: quote -> review -> sign locally -> verified receipt",group:"read",usage:"oracle quickstart [--json] [--check]",async run(e){let t=e.argv||[],r=t.includes("--json"),n=t.includes("--check"),o=null;if(n){let{probeSigner:s,probeQuote:l}=await Promise.resolve().then(()=>(Yn(),Gn)),{probeReviewModule:a,probeReceiptModule:f}=await Promise.resolve().then(()=>(Ze(),Kn)),[c,d,m,p]=await Promise.all([s(process.env),l(),a(),f()]);o=Oe({signerReachable:c,quote:d,reviewAvailable:m,receiptAvailable:p})}if(r)return process.stdout.write(`${JSON.stringify({steps:Xn,...o?{readiness:o}:{}},null,2)}
6
+ `);return 0}}});Ze();var Xn=[{n:1,title:"quote",cmd:"oracle swap quote 8453 <tokenIn> <tokenOut> <amount> --json",note:"read-only. No wallet, no keys."},{n:2,title:"prepare",cmd:"oracle swap prepare ... --taker <yourWallet>",note:"returns an UNSIGNED transaction. Oracle never holds a key."},{n:3,title:"review",cmd:"shown before any signature",note:"decoded action, route, policy pass/fail, approval deltas, prepare hash."},{n:4,title:"sign",cmd:"your wallet, or oracle signer (local encrypted vault)",note:"you type the exact digest. Nothing signs on your behalf."},{n:5,title:"receipt",cmd:"oracle receipt --hash <txid> --chain <chainId>",note:"observed chain state only. No evidence reads UNKNOWN, never success."}],Mh={name:"quickstart",summary:"walk the first-run path: quote -> review -> sign locally -> verified receipt",group:"read",usage:"oracle quickstart [--json] [--check]",async run(e){let t=e.argv||[],r=t.includes("--json"),n=t.includes("--check"),o=null;if(n){let{probeSigner:s,probeQuote:l}=await Promise.resolve().then(()=>(Yn(),Gn)),{probeReviewModule:c,probeReceiptModule:f}=await Promise.resolve().then(()=>(Ze(),Kn)),[a,d,m,p]=await Promise.all([s(process.env),l(),c(),f()]);o=Oe({signerReachable:a,quote:d,reviewAvailable:m,receiptAvailable:p})}if(r)return process.stdout.write(`${JSON.stringify({steps:Xn,...o?{readiness:o}:{}},null,2)}
7
7
  `),o&&!o.ok?1:0;let i=["","Oracle first run \u2014 what actually happens to your money",""];for(let s of Xn)i.push(` ${s.n}. ${s.title}`),i.push(` ${s.cmd}`),i.push(` ${s.note}`),i.push("");if(i.push(" Oracle prepares. You sign. Oracle verifies what happened on chain."),i.push(""),o){i.push("Readiness:");for(let s of o.checks){let l=s.status==="ok"?"ok ":s.status==="warn"?"warn":"FAIL";i.push(` ${l} ${s.id.padEnd(9)} ${s.detail}${s.fix?` -> ${s.fix}`:""}`)}i.push("")}return process.stdout.write(i.join(`
8
8
  `)),o&&!o.ok?1:0}};export{Mh as default};