@oracle-agent/oracle 0.35.11 → 0.35.13
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.
- package/dist/assets/skills/oracle-desk-product/SKILL.md +1 -1
- package/dist/clear-sign/descriptors/calldata-erc20-allowance.json +50 -0
- package/dist/clear-sign/descriptors/calldata-permit2.json +41 -0
- package/dist/clear-sign/erc7730.mjs +1 -1
- package/dist/cli/commands/chat.mjs +165 -165
- package/dist/cli/commands/clear-sign.mjs +3 -3
- package/dist/cli/commands/doctor.mjs +5 -5
- package/dist/cli/commands/eval.mjs +82 -82
- package/dist/cli/commands/model.mjs +168 -168
- package/dist/cli/commands/sign.mjs +11 -11
- package/dist/cli/commands/signer.mjs +14 -14
- package/dist/cli/commands/venues.mjs +2 -2
- package/dist/local-signer/anvil-attestation-worker.mjs +1 -1
- package/dist/local-signer/runtime.mjs +11 -11
- package/package.json +1 -1
- package/public/eval-report.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
var
|
|
2
|
-
`),1;let{clearSignPreview:n}=await Promise.resolve().then(()=>(
|
|
1
|
+
var H=Object.defineProperty;var l=(t,e,r)=>()=>{if(r)throw r[0];try{return t&&(e=t(t=0)),e}catch(a){throw r=[a],a}};var G=(t,e)=>{for(var r in e)H(t,r,{get:e[r],enumerable:!0})};var I=l(()=>{});var g=l(()=>{});var m=l(()=>{});var $=l(()=>{g();m()});import{isAddress as ve}from"ethers";var v=l(()=>{$();g();m()});import{Interface as V,isAddress as _e}from"ethers";var Re,T=l(()=>{v();g();m();Re=new V(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as W,isAddress as ke}from"ethers";var Fe,Ue,_=l(()=>{v();g();m();Fe=new W(["function approve(address spender,uint256 amount) returns (bool)"]),Ue=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});function X(t,e="value"){if(typeof t=="number"){if(!Number.isFinite(t))throw new Error(`${e} must be a finite number`);if(Math.abs(t)>Number.MAX_SAFE_INTEGER)throw new Error(`${e} exceeds safe integer precision \u2014 pass it as a decimal string or BigInt so the exact value is preserved`);if(Number.isInteger(t)&&!Number.isSafeInteger(t))throw new Error(`${e} exceeds safe integer precision \u2014 pass it as a decimal string or BigInt so the exact value is preserved`);return String(t)}if(typeof t=="string"){if(t!==t.trim())throw new Error(`${e} must be a number or decimal string`);return t}throw new Error(`${e} must be a number or decimal string`)}function O(t,e="amount"){if(typeof t=="bigint")return t;if(typeof t=="number"){if(!Number.isInteger(t))throw new Error(`${e} must be an integer`);if(!Number.isSafeInteger(t))throw new Error(`${e} exceeds safe integer precision \u2014 pass it as a decimal string or BigInt so the exact value is preserved`);return BigInt(t)}let r=X(t,e);if(r==="")throw new Error(`${e} is required`);if(!/^-?\d+$/.test(r)&&!/^0x[0-9a-fA-F]+$/.test(r))throw new Error(`${e} must be an integer in decimal or 0x-hex form, got ${JSON.stringify(r)}`);try{return BigInt(r)}catch{throw new Error(`${e} must be an integer, got ${JSON.stringify(r)}`)}}var y=l(()=>{});import{Interface as z,MaxUint256 as Z,isAddress as K,keccak256 as We,toUtf8Bytes as Xe}from"ethers";function C(t,e){let r=String(t||"").trim();if(!K(r))throw new Error(`${e} must be an address`);return r.toLowerCase()}function Y(t,e="approval amount",{allowZero:r=!1}={}){let a=O(t,e);if(r?a<0n:a<=0n)throw new Error(`${e} must be positive`);if(a>=Z)throw new Error("unlimited approvals are refused; use an exact bounded amount");return a.toString()}function A(t){let e=String(t||"").toLowerCase();return e.length<10?!1:Q.has(e.slice(0,10))}function R(t){if(!A(t))throw new Error("approval calldata required");let e=String(t||"").toLowerCase(),r=e.slice(0,10),a=e.slice(10).match(/.{1,64}/g)||[],n=i=>a[i]?"0x"+a[i].slice(24):null,o=i=>a[i]?BigInt("0x"+a[i]):null,s=null,c=null,u=null;switch(r){case"0x095ea7b3":case"0x39509351":s=n(0),c=o(1);break;case"0x61f49ed6":case"0xeb5625d9":case"0xf9255c1f":u=n(0),s=n(1),c=o(2);break;case"0xd505accf":s=n(1),c=o(2);break;case"0x8fcbaf0c":{s=n(1),c=o(4)===0n?0n:(1n<<256n)-1n;break}case"0x87517c45":u=n(0),s=n(1),c=o(2);break;default:throw new Error(`approval selector ${r} is recognised but not decodable; refusing to bound it`)}if(s==null||c==null)throw new Error("invalid approve calldata");return{spender:C(s,"approval spender"),token:u==null?null:C(u,"approval token"),amount:Y(c,"approval amount",{allowZero:!0}),selector:r,additive:ee.has(r)}}var et,Q,ee,B=l(()=>{I();T();_();y();m();et=new z(["function approve(address spender,uint256 amount) returns (bool)"]);Q=new Set(["0x095ea7b3","0x39509351","0x61f49ed6","0xeb5625d9","0xf9255c1f","0x87517c45","0xd505accf","0x8fcbaf0c","0x2b67b570","0x2a2d80d1"]),ee=new Set(["0x39509351","0xf9255c1f"])});var j={};G(j,{CLEAR_SIGN_VERSION:()=>ae,DESCRIPTOR_DIR:()=>D,clearSignPreview:()=>de,loadBundledDescriptors:()=>M,matchDescriptor:()=>F});import{readFileSync as te,readdirSync as re,existsSync as q}from"node:fs";import{dirname as ne,join as h}from"node:path";import{fileURLToPath as oe}from"node:url";function ie(){let t=[h(w,"descriptors"),h(w,"clear-sign","descriptors"),h(w,"..","clear-sign","descriptors"),h(w,"..","..","clear-sign","descriptors"),h(w,"..","..","..","clear-sign","descriptors")];for(let e of t)if(q(e))return e;return t[0]}function M(t=D){if(!q(t))return[];let e=[];for(let r of re(t).filter(a=>a.endsWith(".json")).sort()){let a=te(h(t,r),"utf8"),n;try{n=JSON.parse(a)}catch(o){throw new Error(`clear-sign descriptor ${r} is not valid JSON: ${o.message}`)}e.push({file:r,doc:n})}return e}function F(t,{to:e=null,chainId:r=null}={},a=M()){let n=String(t||"").toLowerCase(),o=se.test(n)?n.slice(0,10):null;if(!o)return null;let s=e&&ce.test(String(e))?String(e).toLowerCase():null;for(let{file:c,doc:u}of a){let i=u?.display?.formats||{};for(let[d,f]of Object.entries(i)){if(String(f?.$selector||"").toLowerCase()!==o)continue;let p=u?.context?.contract?.deployments||[],x=p.length===0,b=p.some(N=>(r==null||Number(N.chainId)===Number(r))&&s&&String(N.address||"").toLowerCase()===s);if(x||b)return{file:c,signature:d,format:f,doc:u,selector:o,generic:x}}}return null}function U(t,e){let r=t.slice(e*64,e*64+64);return r.length===64?r:null}function ue(t,e){let r=U(t,e);return r?`0x${r.slice(24)}`:null}function L(t,e){let r=U(t,e);return r?BigInt(`0x${r}`).toString():null}function k(t){if(t==null)return"unknown";let e=BigInt(t);return e>=fe/2n?"UNLIMITED":e.toString()}function de(t,{to:e=null,chainId:r=null}={},a=void 0){let n=F(t,{to:e,chainId:r},a);if(!n)return null;let o=String(t||"").toLowerCase(),s=o.slice(10),c=[],u=[];for(let i of n.format.fields||[]){if(i.visible==="never")continue;let d=i.$wordIndex,f=null;Number.isInteger(d)&&(f=i.format==="addressName"||i.format==="raw-address"?ue(s,d):i.format==="amount"||i.format==="tokenAmount"?k(L(s,d)):L(s,d)),f!=null&&(u.push({label:i.label,value:f}),c.push(`${i.label}: ${f}`))}if(A(o)){let i=null,d=null;try{i=R(o)}catch(f){let p=String(f?.message||f);if(/unlimited approvals are refused/i.test(p))d="ORACLE POLICY: unlimited approval \u2014 Oracle refuses to prepare this; bound the amount";else return{ok:!1,refused:`descriptor matched but reviewed decoder refused: ${p}`,intent:n.format.intent}}if(i){let f=u.find(b=>/spender/i.test(b.label))?.value?.toLowerCase();if(f&&i.spender&&f!==i.spender.toLowerCase())return{ok:!1,refused:"descriptor spender disagrees with reviewed decoder",intent:n.format.intent};let p=u.find(b=>/amount|allowance/i.test(b.label))?.value,x=k(i.amount);if(p!=null&&i.amount!=null&&String(p)!==x)return{ok:!1,refused:"descriptor amount disagrees with reviewed decoder",intent:n.format.intent}}return d&&c.push(d),{ok:!0,intent:n.format.intent,signature:n.signature,selector:n.selector,descriptor:n.file,generic:n.generic,fields:u,lines:c,...d?{policyNote:d}:{}}}return{ok:!0,intent:n.format.intent,signature:n.signature,selector:n.selector,descriptor:n.file,generic:n.generic,fields:u,lines:c}}var ae,w,D,se,ce,fe,P=l(()=>{B();ae=1,w=ne(oe(import.meta.url));D=ie(),se=/^0x[0-9a-f]{8}/,ce=/^0x[0-9a-fA-F]{40}$/;fe=(1n<<256n)-1n});import{parseArgs as le}from"node:util";var st={name:"clear-sign",summary:"ERC-7730 clear-sign preview for calldata",group:"read",usage:"oracle clear-sign <calldata> [--to 0x\u2026] [--chain-id N] [--json]",async run(t){let{values:e,positionals:r}=le({args:t.argv,options:{to:{type:"string"},"chain-id":{type:"string"},json:{type:"boolean"}},allowPositionals:!0,strict:!1}),a=r[0];if(!a||!/^0x[0-9a-fA-F]{8,}$/.test(a))return process.stderr.write(`oracle clear-sign: calldata (0x\u2026) required
|
|
2
|
+
`),1;let{clearSignPreview:n}=await Promise.resolve().then(()=>(P(),j)),o=n(a,{to:e.to||null,chainId:e["chain-id"]?Number(e["chain-id"]):null});if(!o){let s={ok:!1,match:!1,reason:"no bundled ERC-7730 descriptor covers this selector/destination"};return process.stdout.write(e.json?JSON.stringify(s)+`
|
|
3
3
|
`:`NO DESCRIPTOR \u2014 falls back to sign-time review
|
|
4
4
|
`),3}if(!o.ok){let s={ok:!1,match:!0,refused:o.refused,intent:o.intent};return process.stdout.write(e.json?JSON.stringify(s)+`
|
|
5
5
|
`:`REFUSED \u2014 ${o.refused}
|
|
@@ -7,4 +7,4 @@ var j=Object.defineProperty;var l=(t,e,r)=>()=>{if(r)throw r[0];try{return t&&(e
|
|
|
7
7
|
`);else{process.stdout.write(`${o.intent}${o.generic?" (token-generic)":""}
|
|
8
8
|
`);for(let s of o.lines)process.stdout.write(` ${s}
|
|
9
9
|
`);process.stdout.write(` [${o.descriptor} \xB7 ${o.selector}]
|
|
10
|
-
`)}return 0}};export{
|
|
10
|
+
`)}return 0}};export{st as default};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
var In=Object.defineProperty;var l=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(n){throw r=[n],n}};var be=(e,t)=>{for(var r in t)In(e,r,{get:t[r],enumerable:!0})};import Ee from"node:fs";import Tn from"node:os";import X from"node:path";import{fileURLToPath as On}from"node:url";function Me(){return process.env.ORACLE_FAKE_HOME||Tn.homedir()}function Cn(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function Q(){return Cn()?process.env.ORACLE_CONFIG_DIR||X.join(Me(),".config","oracle"):X.join(Me(),".config","oracle")}function Nn(){return X.join(Q(),"desk.json")}function Rn(){return X.join(Q(),"env")}function Y({force:e=!1}={}){if(Y._done&&!e)return Y._result||null;Y._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=Rn();if(Ee.existsSync(o))for(let i of Ee.readFileSync(o,"utf8").split(/\r?\n/)){let s=i.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!s||s[2].startsWith("#"))continue;let d=s[2];(d.startsWith('"')&&d.endsWith('"')||d.startsWith("'")&&d.endsWith("'"))&&(d=d.slice(1,-1)),r(s[1],d)}}catch{}try{let o=Nn();if(Ee.existsSync(o)){let i=JSON.parse(Ee.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)),Y._result=Object.keys(t).length?t:null,Y._result}var _n,S,xe=l(()=>{_n=X.dirname(On(import.meta.url)),S=X.resolve(_n,"../..");try{Y()}catch{}});function Kt(e){return ro.get(Number(e))||null}function Yt(e,t=process.env){let r=Kt(e);if(!r)return null;for(let n of r.rpcEnv){let o=(t[n]||"").trim();if(o)return o}return null}var Ae,ro,Ge=l(()=>{Ae={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(Ae).map(e=>[e.chainId,e]))});function se(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 Je=l(()=>{});var Xt=l(()=>{});var Qt=l(()=>{});var ae=l(()=>{});var te=l(()=>{});var ke=l(()=>{ae();te()});import{isAddress as ua}from"ethers";var Ke=l(()=>{ke();ae();te()});import{Interface as io,isAddress as ha}from"ethers";var ba,Zt=l(()=>{Ke();ae();te();ba=new io(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as so,isAddress as Sa}from"ethers";var Ia,Ta,er=l(()=>{Ke();ae();te();Ia=new so(["function approve(address spender,uint256 amount) returns (bool)"]),Ta=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var z=l(()=>{});import{Interface as ao,MaxUint256 as $a,isAddress as Pa,keccak256 as Ba,toUtf8Bytes as Fa}from"ethers";var za,H=l(()=>{Qt();Zt();er();z();te();za=new ao(["function approve(address spender,uint256 amount) returns (bool)"])});var Wa,Ga,Ie=l(()=>{Wa=300*1e3,Ga=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});var Te=l(()=>{H()});import{Address as Xa,NETWORK as Qa,OutScript as Za,RawTx as ec,SigHash as tc,TEST_NETWORK as rc,Transaction as nc}from"@scure/btc-signer";var Qe=l(()=>{});import{createHash as co}from"node:crypto";import{base58 as ac}from"@scure/base";import{getCompiledTransactionMessageDecoder as uc}from"@solana/transaction-messages";var tr,lc,Ze=l(()=>{tr=e=>co("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),lc=new Map([[tr("route"),{name:"route",prefixBytes:0}],[tr("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]])});import W from"node:net";import uo from"node:dns";function Oe(e){let t=String(e).toLowerCase().split("%")[0];if((t.match(/::/g)||[]).length>1)return null;let r=m=>{if(!m)return[];let c=m.split(":"),f=c.at(-1);if(f?.includes(".")){let u=f.split(".").map(Number);if(u.length!==4||u.some(b=>!Number.isInteger(b)||b<0||b>255))return null;c.splice(c.length-1,1,(u[0]<<8|u[1]).toString(16),(u[2]<<8|u[3]).toString(16))}return c.some(u=>!/^[0-9a-f]{1,4}$/.test(u))?null:c.map(u=>Number.parseInt(u,16))},[n,o]=t.split("::"),i=r(n),s=r(o);if(!i||!s)return null;let d=t.includes("::"),a=8-i.length-s.length;if(!d&&a!==0||d&&a<1)return null;let p=[...i,...Array(Math.max(0,a)).fill(0),...s];return p.length!==8?null:Uint8Array.from(p.flatMap(m=>[m>>8,m&255]))}function et(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 tt(e){if(W.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(W.isIPv6(e)){let t=Oe(e);if(!t)return!1;let r=Oe("::ffff:0:0");return et(t,r,96)?tt([...t.slice(12)].join(".")):et(t,Oe("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([o,i])=>et(t,Oe(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=W.isIP(r);return n!==0&&!tt(r)?{ok:!1,error:`refused private address ${r}`}:{ok:!0,url:t,host:r,isLiteralIp:n!==0}}async function rt(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:W.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=>!tt(o.address))?{ok:!1,error:`refused: ${r.host} resolves to a non-public address`}:{ok:!0,url:r.url,addresses:n}}async function nt({requireUndici:e=!1,importUndici:t=()=>import("undici")}={}){let r,n;try{let c=await t();r=c.Agent,n=c.fetch}catch(c){if(e)throw new Error(`egress-guard: untrustedUrl pinning requires the undici package, which failed to load: ${c?.message||c}`);return null}if(typeof r!="function"||typeof 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=c=>String(c).toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,""),i=new Map,s=c=>(Array.isArray(c)?c:[c]).map(f=>typeof f=="string"?{address:f}:f).filter(f=>f&&f.address).map(f=>({address:f.address,family:f.family||(W.isIPv6(f.address)?6:4)})),d=(c,f,u)=>{i.set(o(c),s(typeof f=="string"?[{address:f,family:u}]:f))},a=c=>{let f=o(c);if(W.isIP(f))return[{address:f,family:W.isIPv6(f)?6:4}];let u=i.get(f);if(!u||!u.length)throw new Error(`refused: unpinned host ${c} during pinned fetch`);return u},p=new r({connect:{lookup(c,f,u){let b;try{b=a(c)}catch(w){return u(w)}return f?.all?u(null,b):u(null,b[0].address,b[0].family)}}}),m=po((c,f={})=>n(c,{...f,dispatcher:p}),d);return{dispatcher:p,fetch:m,pin:d,resolve:a,async close(){try{await p.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[ot]=Object.freeze({pin:t}),e}function it(e){return typeof e=="function"&&typeof e[ot]?.pin=="function"}function rr(e,t,r){if(!it(e))throw new Error("pinFetchToAddresses: fetchImpl is not pin-capable");e[ot].pin(t,r)}var lo,ot,nr=l(()=>{lo=new Set(["localhost","metadata.google.internal","metadata.goog"]);ot=Symbol.for("oracle.egressGuard.pinCapableFetch")});import{createHash as or}from"node:crypto";function yo(e){let t=String(e||"").toLowerCase();return dr.includes(t)||/(^|-)(api[-_]?key|key|token|secret|auth|authorization|session|cookie|signature|access)(-|$)/.test(t)}function bo(e){let t={};for(let[r,n]of Object.entries(e||{}))yo(r)||(t[r]=n);return t}function Eo(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 xo(e,t){return new URL(String(e)).origin===new URL(String(t)).origin}function cr(e){let t=String(e?.method||"");return t?!So.test(t):!1}function vo(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}return Array.isArray(r)?r.length>0&&r.every(cr):!r||typeof r!="object"?!1:r.jsonrpc&&r.method?cr(r):typeof r.type=="string"&&Ao.has(r.type)&&r.action==null&&r.signature==null&&r.nonce==null}function ko(e,t,r,n={},o=null){let i={};for(let[f,u]of Object.entries(r||{}))i[f.toLowerCase()]=u;let s=Object.keys(i).filter(f=>/(^|-)(api[-_]?key|key|token|secret|auth|authorization|session|cookie|signature|access)(-|$)/.test(f)),a=[...new Set([...dr,...s])].sort().map(f=>`${f}=${i[f]??""}`).join(`
|
|
2
|
-
`),p=or("sha256").update(a).digest("hex").slice(0,32),m=`${n.untrustedUrl?"untrusted":"trusted"}:${n.maxResponseBytes??"unbounded"}`,c=o==null?"-":or("sha256").update(String(o)).digest("hex").slice(0,32);return`${e} ${t} ${m} ${p} ${c}`}function Io(e,t){let r=Number(t);return Number.isFinite(r)&&r>0?Math.min(r*1e3,sr):Math.min(250*2**e,sr)+Math.floor(Math.random()*100)}function ue(e,t={}){let r=new Error(e);return r.retryable=!1,Object.assign(r,t),r}function at(e,t,r){return ue(`HTTP response from ${e} exceeded maxResponseBytes ${r} (${t})`,{oversize:!0})}function le(e){try{let t=e?.body?.cancel?.();t&&typeof t.then=="function"&&t.catch(()=>{})}catch{}}function Oo(e){return e?e.byteLength??e.length??0:0}async function ur(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&&(le(e),!n))throw at(r,`content-length ${i}`,t);let s=e.body?.getReader?.();if(!s){let c=await e.text(),f=Buffer.byteLength(c,"utf8");if(f>t){if(!n)throw at(r,`body ${f} bytes`,t);return Buffer.from(c,"utf8").subarray(0,t).toString("utf8")}return c}let d=[],a=0,p=!1;try{for(;;){let{value:c,done:f}=await s.read();if(f)break;if(c&&(d.push(Buffer.from(c)),a+=Oo(c),a>t)){p=!0;break}}}finally{if(p)try{await s.cancel()}catch{}try{s.releaseLock?.()}catch{}}if(p&&(typeof o=="function"&&o(),!n))throw at(r,`streamed ${a} bytes`,t);let m=Buffer.concat(d);return(p?m.subarray(0,t):m).toString("utf8")}function lr(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}async function _o(e,{fetchImpl:t,method:r,headers:n,body:o,timeoutMs:i,lookupFn:s,realFetch:d,untrustedUrl:a=!1,maxResponseBytes:p=null,importUndici:m,validateResponse:c,signal:f}){let u=new AbortController,b=setTimeout(()=>u.abort(),i),w=f?typeof AbortSignal.any=="function"?AbortSignal.any([f,u.signal]):f:u.signal,h=null,I=t,O=s?{lookupFn:s}:{};if(a&&!d&&!it(I))throw ue(`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 g=async(y,{status:x=null}={})=>{let v=await rt(y,O);if(!v.ok)throw ue(x==null?`HTTP refused ${y}: ${v.error}`:`HTTP redirect to ${y} ${v.error}`,x==null?{}:{status:x});let E=new URL(y).hostname;if(d){if(h&&(await h.close(),h=null),!h)try{h=await nt({requireUndici:!0,...m?{importUndici:m}:{}})}catch(_){throw ue(x==null?`HTTP refused ${y}: ${_?.message||_}`:`HTTP redirect to ${y} refused: ${_?.message||_}`,x==null?{}:{status:x})}h.pin(E,v.addresses),I=h.fetch}else rr(I,E,v.addresses);return v};try{let y=String(e),x={...n||{}};a&&await g(y);for(let v=0;v<=ar;v+=1){let E=await I(y,{method:r,headers:x,body:o,signal:w,redirect:"manual"});if(wo.has(E.status)){if(r!=="GET"&&r!=="HEAD"){let L=await ur(E,p??go,{url:y,truncate:!0}),M=new Error(`HTTP ${E.status} ${r} ${y} redirected non-idempotent request`);throw M.status=E.status,M.body=lr(L)??L.slice(0,300),M}if(v===ar)throw le(E),new Error(`HTTP redirect loop for ${e}`);let C=E.headers?.get?.("location"),B;try{B=Eo(C,y)}catch(L){throw le(E),L}let F=!xo(B,y);if(le(E),F&&(x=bo(x)),a)await g(B,{status:E.status});else if(F){let L=await rt(B,O);if(!L.ok){let M=new Error(`HTTP redirect from ${y} ${L.error}`);throw M.status=E.status,M.retryable=!1,M}d&&L.addresses?.length&&(h||(h=await nt(m?{importUndici:m}:{})),h&&(h.pin(new URL(B).hostname,L.addresses),I=h.fetch))}y=B;continue}if(typeof c=="function")try{await c(E,{url:y})}catch(C){throw le(E),ue(C?.message||String(C))}let _=await ur(E,p,{url:y,onOversize:()=>u.abort()}),K=lr(_);if(!E.ok){let C=new Error(`HTTP ${E.status} ${r} ${y}`);throw C.status=E.status,C.retryAfter=E.headers?.get?.("retry-after")??null,C.body=K??_.slice(0,300),C}return K??_}throw new Error(`HTTP redirect loop for ${e}`)}finally{clearTimeout(b),h&&await h.close()}}async function _e(e,t={}){let r=t.fetchImpl||globalThis.fetch;if(typeof r!="function")throw new Error("fetch unavailable \u2014 pass opts.fetchImpl");let n=t.timeoutMs??12e3,o=(t.method||"GET").toUpperCase(),i={Accept:"application/json",...t.headers||{}},s=t.body;s!=null&&typeof s!="string"&&(i["Content-Type"]=i["Content-Type"]||"application/json",s=JSON.stringify(s));let d=Number.isInteger(t.retries)?Math.max(t.retries,0):ho,a=t.lookupFn,p=!t.fetchImpl,m=t.untrustedUrl===!0,c=t.importUndici,f=t.validateResponse,u=t.signal,b=Number(t.maxResponseBytes),w=Number.isFinite(b)&&b>0?Math.floor(b):null,h=async()=>{let x;for(let v=0;v<=d;v++){u?.throwIfAborted?.();try{return await _o(e,{fetchImpl:r,method:o,headers:i,body:s,timeoutMs:n,lookupFn:a,realFetch:p,untrustedUrl:m,maxResponseBytes:w,importUndici:c,validateResponse:f,signal:u})}catch(E){x=E;let _=E?.status,K=E?.name==="AbortError"||E?.name==="TimeoutError"||u?.aborted,C=new Set([408,425,429]),B=E?.retryable===!1?!1:_!=null?C.has(_)||mo.has(_)&&ir.has(o):!K&&ir.has(o);if(v===d||!B)throw E;let F=Io(v,E?.retryAfter);u?await new Promise((L,M)=>{let kn=setTimeout(L,F);u.addEventListener("abort",()=>{clearTimeout(kn),M(u.reason||new DOMException("Aborted","AbortError"))},{once:!0})}):await To(F)}}throw x};if(!(t.dedupe!==!1&&!u&&vo(o,s)))return h();let O=ko(o,e,i,{untrustedUrl:m,maxResponseBytes:w},s),g=st.get(O);if(g)return g;let y=h().finally(()=>st.delete(O));return st.set(O,y),y}var mo,ir,ho,sr,dr,wo,ar,go,st,So,Ao,To,Ce=l(()=>{nr();mo=new Set([408,425,429,500,502,503,504]),ir=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),ho=2,sr=4e3,dr=["authorization","x-api-key","x-tensor-api-key","0x-api-key","api-key","cookie","proxy-authorization"],wo=new Set([301,302,303,307,308]),ar=3,go=64*1024;st=new Map,So=/(?:^|_)(send|submit|broadcast|sign|requestAirdrop)(?=[A-Z_]|$)/i,Ao=new Set(["allMids","l2Book","outcomeMeta","spotClearinghouseState","userFills","meta","metaAndAssetCtxs","perpDexs","candleSnapshot","fundingHistory","openOrders","frontendOpenOrders","clearinghouseState","spotMeta","validatorSummaries","delegatorSummary","delegations","delegatorRewards","delegatorHistory","maxBuilderFee"]);To=e=>new Promise(t=>setTimeout(t,e))});var fr=l(()=>{Ce()});var pr=l(()=>{fr()});var Tc,Oc,ut=l(()=>{z();pr();Tc=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"}),Oc=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 Nc,lt=l(()=>{z();Nc="0x"+"00".repeat(32)});var Co,Bc,dt=l(()=>{lt();z();Co=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),Bc=Object.freeze(Co.map(e=>e[0]))});var Ne=l(()=>{z()});import{TypedDataEncoder as qc,getAddress as Uc,isAddress as zc}from"ethers";var Ro,Lo,gr=l(()=>{Ie();Ro=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),Lo=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 Gc,yr=l(()=>{Gc=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"})});var br=l(()=>{});import{TypedDataEncoder as eu,getAddress as tu,isAddress as ru}from"ethers";var $o,uu,Po,lu,Er=l(()=>{Ce();ke();yr();br();Ie();$o=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),uu=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"}),Po=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"}]}),lu=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]})});import{TypedDataEncoder as pu,getAddress as mu}from"ethers";var gu,ft=l(()=>{gr();Er();gu=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"])});import{Interface as Sr}from"ethers";var qo,$u,Uo,Pu,Bu,Fu,Du,zo,Mu,Re=l(()=>{H();ke();Ie();Te();Qe();Ze();ut();dt();Ne();ft();qo=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]),$u=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}),Uo=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"}}),Pu=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),Bu=new Sr(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Fu=new Sr(["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"]),Du=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"}}),zo=Object.freeze([...qo]),Mu=Object.freeze({...Uo})});import{encode as Uu}from"@msgpack/msgpack";import{keccak256 as Hu,verifyTypedData as Wu}from"ethers";var Gu,Ju,pt=l(()=>{Gu=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Ju=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var mt=l(()=>{Ne()});import{ed25519 as tl}from"@noble/curves/ed25519.js";import{base58 as nl}from"@scure/base";import{RawTx as il,SigHash as sl,Transaction as al}from"@scure/btc-signer";import{Transaction as ul,keccak256 as ll,verifyTypedData as dl}from"ethers";var ht=l(()=>{pt();mt()});import{base58 as yl}from"@scure/base";var Le=l(()=>{Re();Te();H();ht()});var vr=l(()=>{Le();Re()});var Cl,Nl,Rl,re=l(()=>{Cl=Object.freeze({N:1<<17,r:8,p:1}),Nl=256*1024*1024,Rl=16*1024});var $l,kr=l(()=>{$l=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 wt}from"node:os";import{join as gt}from"node:path";var Ir,Go,Dl,Tr=l(()=>{Ir=process.env.ORACLE_PUBLIC_DESKTOP==="1",Go=Ir?process.env.ORACLE_CONFIG_DIR||gt(wt(),".config","oracle"):gt(wt(),".config","oracle"),Dl=Ir?Go:gt(wt(),".config","mad-desk")});var zl,Hl,Wl,Or=l(()=>{Tr();zl="0".repeat(64),Hl=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"}),Wl=Promise.resolve()});var yt=l(()=>{Or();z();re();Le()});var Cr=l(()=>{});var Lr={};be(Lr,{SIGN_TIME_REVIEW_VERSION:()=>Jo,SignTimeReviewSecretError:()=>de,createSignTimeReview:()=>Rr});function bt(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string"){let o=e.trim().split(/\s+/);if(Qo.test(e)||Zo.has(o.length)&&o.every(i=>/^[a-z]+$/i.test(i)))throw new de(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)=>bt(o,`${t}[${i}]`,r));G(e,t);let n={};for(let o of Object.keys(e).sort()){let i=o.replace(/[^a-z0-9]/gi,"");if(Xo.test(i))throw new de(`${t}.${o}`);e[o]!==void 0&&(n[o]=bt(e[o],`${t}.${o}`,o))}return n}function G(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 fe(e,t){if(e==null||e==="")throw new TypeError(`sign-time review: ${t} required`);return e}function ne(e,t){let r=String(fe(e,t)).toLowerCase();if(!Vo.test(r))throw new TypeError(`sign-time review: ${t} must be an EVM address`);return r}function j(e,t,{positive:r=!1}={}){try{let n=BigInt(fe(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 Et(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 Nr(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))Nr(t);Object.freeze(e)}return e}function ei(e,t){if(typeof e=="boolean")return{passed:e,reason:e?"passed":"failed"};G(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:Et(String(n),`${t}.reason`)}}function ti(e){if(!Array.isArray(e))throw new TypeError("sign-time review: policyChecks must be an array");let t=e.map((n,o)=>ei(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 ri(e){if(e==null)return null;if(G(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:Et(String(e.summary??"simulation result recorded"),"simulation.summary")};return e.gasEstimate!=null&&(t.gasEstimate=j(e.gasEstimate,"simulation.gasEstimate")),e.gasLimit!=null&&(t.gasLimit=j(e.gasLimit,"simulation.gasLimit")),t}function ni(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)=>{G(t,`assetDeltas[${r}]`);let n=j(t.before,`assetDeltas[${r}].before`),o=j(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:Et(String(fe(t.asset??t.token,`assetDeltas[${r}].asset`)),`assetDeltas[${r}].asset`),before:n,after:o,delta:s}})}function oi(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)=>{G(t,`approvalDeltas[${r}]`);let n=j(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 Rr(e={}){G(e,"input");let t=bt(e),r=t.tx==null?t:G(t.tx,"tx"),n=j(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(fe(t.prepareHash,"prepareHash")).toLowerCase();if(!Yo.test(s))throw new TypeError("sign-time review: prepareHash must be a 32-byte hash");let d=t.route??t.venue;if(d==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 p=String(fe(t.calldata??t.data??r.data,"calldata/data")).toLowerCase();if(!Ko.test(p))throw new TypeError("sign-time review: calldata/data must be even-length hex");let m=t.policyChecks!==void 0&&t.policyChecks!==null,c=ti(m?t.policyChecks:[]),f=ri(t.simulation),u=ni(t.assetDeltas),b=oi(t.approvalDeltas),w=t.allowlistHits??[];if(!Array.isArray(w))throw new TypeError("sign-time review: allowlistHits must be an array");let h=f?.willRevert===!0||["failed","error"].includes(f?.status),I=f!=null&&f.willRevert===!1&&["ok","success"].includes(f.status),O=h||c.failed>0?"BLOCKED":I&&m&&c.checks.length>0&&u!=null?"READY":"UNKNOWN",g=typeof a=="string"?a:a.method??a.action??a.type??"transaction",y=`${O}: review ${g} on chain ${n}; policy ${c.passed} passed, ${c.failed} failed; ${u?.length??0} asset delta${u?.length===1?"":"s"}; local signature required`,x={reviewVersion:1,status:O,requiresLocalSignature:!0,signingLocal:!0,custody:"none",execution:"review-only",chainId:n,account:o,from:o,route:d,venue:t.venue??(typeof d=="string"?d:d.venue??d.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:p,data:p,selector:p.length>=10?p.slice(0,10):null,value:j(t.value??r.value??0,"value"),...(t.gasEstimate??r.gasEstimate)==null?{}:{gasEstimate:j(t.gasEstimate??r.gasEstimate,"gasEstimate")},...(t.gasLimit??r.gasLimit)==null?{}:{gasLimit:j(t.gasLimit??r.gasLimit,"gasLimit")},simulation:f,policyChecks:c,allowlistHits:w,assetDeltas:u,approvalDeltas:b,summary:y};return Nr(x)}var Jo,Vo,Ko,Yo,Xo,Qo,Zo,de,xt=l(()=>{Jo=1,Vo=/^0x[0-9a-f]{40}$/,Ko=/^0x(?:[0-9a-f]{2})*$/,Yo=/^(?:0x)?[0-9a-f]{64}$/,Xo=/(privatekey|privkey|secretkey|seedphrase|mnemonic|passphrase|password|keystore|keymaterial|wif|xprv|xpriv|bearer|authorization|signature|apikey|credential)/i,Qo=/\b(?:[5KL][1-9A-HJ-NP-Za-km-z]{50,51}|xprv[0-9A-Za-z]{50,})\b/,Zo=new Set([12,15,18,21,24]),de=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{dirname as ii,join as si}from"node:path";import{fileURLToPath as ai}from"node:url";var ci,nd,od,$r=l(()=>{H();ci=ii(ai(import.meta.url)),nd=si(ci,"descriptors"),od=(1n<<256n)-1n});var Pr=l(()=>{xt();H();$r()});import{Wallet as fd}from"ethers";import{base58 as md}from"@scure/base";import{ed25519 as wd}from"@noble/curves/ed25519.js";import{NETWORK as yd,TEST_NETWORK as bd,WIF as Ed,p2wpkh as xd}from"@scure/btc-signer";import{pubECDSA as Ad}from"@scure/btc-signer/utils.js";var Br=l(()=>{});var Id,Td,Od,_d,Cd,Nd,Rd,Ld,$d,Pd,Bd,Fr=l(()=>{yt();Id=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),Td=Object.freeze(["binance","bybit","okx","coinbase"]),Od=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),_d=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),Cd=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),Nd=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),Rd=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),Ld=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),$d=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),Pd=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),Bd=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"})});var Dr=l(()=>{re()});var di,Mr,Pe=l(()=>{di=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}"]})}),Mr=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"})});var jr=l(()=>{Pe()});var Gd,qr=l(()=>{Pe();jr();Gd=256*1024});var Ur=l(()=>{Pe();qr()});var zr=l(()=>{re()});import N from"node:path";import fi from"node:os";import{createHash as pi,randomBytes as Ff}from"node:crypto";import{Interface as St,keccak256 as Mf}from"ethers";import{Transaction as qf}from"@scure/btc-signer";import{ed25519 as zf}from"@noble/curves/ed25519.js";function Hr(e){let t=process.env.ORACLE_SIGNER_STATE_DIR||N.join(process.env.XDG_STATE_HOME||N.join(fi.homedir(),".local","state"),"oracle"),r=pi("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`),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`)}}var gp,yp,bp,Wr=l(()=>{vr();Le();re();kr();yt();Cr();H();Pr();Re();Te();ht();ut();dt();Ne();mt();lt();pt();Qe();Ze();ft();Br();Fr();Dr();Ur();zr();gp=new St(["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"]),yp=new St(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),bp=new St(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"])});import At from"node:fs";import Gr from"node:path";import{homedir as mi}from"node:os";function hi(){return process.env.ORACLE_CONFIG_DIR||Gr.join(mi(),".config","oracle")}function pe(){let e=Hr(Gr.join(hi(),"signer")),t=At.existsSync(e.vault),r=At.existsSync(e.lock),n=t?r?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:t,policyConfigured:At.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 Cp,vt=l(()=>{Je();Xt();Wr();re();Cp=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_ack",description:"Execute one pending artifact through the armed local signer (same path as Telegram Allow). Fails if the signer is not running or disarmed. Never holds keys.",parameters:{type:"object",properties:{id:{type:"string"},digest:{type:"string"}},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}}}])});function Be(e){return String(e||"").trim()||void 0}function gi(e,{required:t=!1}={}){let r=Be(e)?.toLowerCase();if(!r){if(t)throw new Error("model provider is required");return}if(!wi.has(r))throw new Error(`unsupported provider: ${r}`);return r}function yi(e,{required:t=!1}={}){let r=Be(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 bi(e){let t=Be(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 Jr({provider:e,model:t,baseUrl:r}={},{requireModel:n=!1}={}){let o=gi(e),i=yi(t,{required:n});if(o==="custom")return{provider:o,...i?{model:i}:{},baseUrl:bi(r)};if(Be(r))throw new Error("baseUrl is only supported for the custom provider");return{...o?{provider:o}:{},...i?{model:i}:{}}}var wi,Vr=l(()=>{wi=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","qwen","glm","local","ollama","custom","anthropic-oauth","openai-codex","xai-oauth"])});import Kr from"node:fs";import Ei from"node:path";function Si(){return Ei.join(Q(),"model.json")}function oe(e){return String(e||"").trim()||void 0}function Ai(e={}){let t=oe(e.backend)?.toLowerCase()||"auto",r=Jr({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:t==="standalone"}),n=oe(e.apiKeyEnv),o=Number.parseInt(String(e.contextLength||""),10),i=oe(e.reasoningEffort),s=oe(e.computeHost||e.remoteHost),d=oe(e.computeUser||e.remoteUser),a=oe(e.computePath||e.remotePath);if(!xi.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}:{},...d?{computeUser:d}:{},...a?{computePath:a}:{}}}function Yr(){let e=Si();if(!Kr.existsSync(e))return null;try{return Ai(JSON.parse(Kr.readFileSync(e,"utf8")))}catch{return null}}var xi,Xr=l(()=>{xe();Vr();xi=new Set(["auto","standalone","hermes","remote","arch"])});import{Interface as vi,getAddress as ki}from"ethers";function kt(e,t){try{return ki(e).toLowerCase()}catch{throw new Error(`${t} must be a valid EVM address`)}}function Ii(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 It(e){return e==null?null:Number.parseInt(String(e),16)}function Oi(e,{rpcUrl:t,env:r=process.env}={}){if(t)return t;let n=Yt(e,r);return n||Ti[Number(e)]||null}function Ci(e){let t=String(e||""),r=t.toLowerCase();if(t!==t.trim()||!/^[a-zA-Z0-9_]+$/.test(t)||!_i.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 Ni(e){let t=new Error(e?.message||JSON.stringify(e));return t.code=e?.code,t}function Ri(e){if(e?.error)throw Ni(e.error);return e?.result}function Li(e,t,r){return`${e}
|
|
1
|
+
var On=Object.defineProperty;var l=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(n){throw r=[n],n}};var xe=(e,t)=>{for(var r in t)On(e,r,{get:t[r],enumerable:!0})};import Se from"node:fs";import _n from"node:os";import X from"node:path";import{fileURLToPath as Cn}from"node:url";function qe(){return process.env.ORACLE_FAKE_HOME||_n.homedir()}function Rn(){return process.env.ORACLE_PUBLIC_DESKTOP==="1"}function Q(){return Rn()?process.env.ORACLE_CONFIG_DIR||X.join(qe(),".config","oracle"):X.join(qe(),".config","oracle")}function Ln(){return X.join(Q(),"desk.json")}function $n(){return X.join(Q(),"env")}function Y({force:e=!1}={}){if(Y._done&&!e)return Y._result||null;Y._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=$n();if(Se.existsSync(o))for(let i of Se.readFileSync(o,"utf8").split(/\r?\n/)){let s=i.match(/^\s*([A-Z0-9_]+)\s*=\s*(.*?)\s*$/);if(!s||s[2].startsWith("#"))continue;let d=s[2];(d.startsWith('"')&&d.endsWith('"')||d.startsWith("'")&&d.endsWith("'"))&&(d=d.slice(1,-1)),r(s[1],d)}}catch{}try{let o=Ln();if(Se.existsSync(o)){let i=JSON.parse(Se.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)),Y._result=Object.keys(t).length?t:null,Y._result}var Nn,S,Ae=l(()=>{Nn=X.dirname(Cn(import.meta.url)),S=X.resolve(Nn,"../..");try{Y()}catch{}});function Xt(e){return oo.get(Number(e))||null}function Qt(e,t=process.env){let r=Xt(e);if(!r)return null;for(let n of r.rpcEnv){let o=(t[n]||"").trim();if(o)return o}return null}var ke,oo,Ve=l(()=>{ke={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}},oo=new Map(Object.values(ke).map(e=>[e.chainId,e]))});function se(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 Ke=l(()=>{});var Zt=l(()=>{});var er=l(()=>{});var ae=l(()=>{});var te=l(()=>{});var Te=l(()=>{ae();te()});import{isAddress as da}from"ethers";var Xe=l(()=>{Te();ae();te()});import{Interface as ao,isAddress as ga}from"ethers";var xa,tr=l(()=>{Xe();ae();te();xa=new ao(["function approve(address spender,uint256 amount) returns (bool)"])});import{Interface as co,isAddress as va}from"ethers";var Oa,_a,rr=l(()=>{Xe();ae();te();Oa=new co(["function approve(address spender,uint256 amount) returns (bool)"]),_a=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"})});var z=l(()=>{});import{Interface as uo,MaxUint256 as Ba,isAddress as Da,keccak256 as Fa,toUtf8Bytes as Ma}from"ethers";var Wa,H=l(()=>{er();tr();rr();z();te();Wa=new uo(["function approve(address spender,uint256 amount) returns (bool)"])});var Ja,Va,Oe=l(()=>{Ja=300*1e3,Va=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});var _e=l(()=>{H()});import{Address as Za,NETWORK as ec,OutScript as tc,RawTx as rc,SigHash as nc,TEST_NETWORK as oc,Transaction as ic}from"@scure/btc-signer";var et=l(()=>{});import{createHash as lo}from"node:crypto";import{base58 as uc}from"@scure/base";import{getCompiledTransactionMessageDecoder as dc}from"@solana/transaction-messages";var nr,fc,tt=l(()=>{nr=e=>lo("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),fc=new Map([[nr("route"),{name:"route",prefixBytes:0}],[nr("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]])});import W from"node:net";import fo from"node:dns";function Ce(e){let t=String(e).toLowerCase().split("%")[0];if((t.match(/::/g)||[]).length>1)return null;let r=m=>{if(!m)return[];let c=m.split(":"),f=c.at(-1);if(f?.includes(".")){let u=f.split(".").map(Number);if(u.length!==4||u.some(b=>!Number.isInteger(b)||b<0||b>255))return null;c.splice(c.length-1,1,(u[0]<<8|u[1]).toString(16),(u[2]<<8|u[3]).toString(16))}return c.some(u=>!/^[0-9a-f]{1,4}$/.test(u))?null:c.map(u=>Number.parseInt(u,16))},[n,o]=t.split("::"),i=r(n),s=r(o);if(!i||!s)return null;let d=t.includes("::"),a=8-i.length-s.length;if(!d&&a!==0||d&&a<1)return null;let p=[...i,...Array(Math.max(0,a)).fill(0),...s];return p.length!==8?null:Uint8Array.from(p.flatMap(m=>[m>>8,m&255]))}function rt(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 nt(e){if(W.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(W.isIPv6(e)){let t=Ce(e);if(!t)return!1;let r=Ce("::ffff:0:0");return rt(t,r,96)?nt([...t.slice(12)].join(".")):rt(t,Ce("2000::"),3)?![["2001::",23],["2001:db8::",32],["2001:10::",28],["2001:2::",48],["2002::",16],["3fff::",20]].some(([o,i])=>rt(t,Ce(o),i)):!1}return!1}function mo(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(po.has(r)||r.endsWith(".localhost")||r.endsWith(".internal"))return{ok:!1,error:`refused internal host ${r}`};let n=W.isIP(r);return n!==0&&!nt(r)?{ok:!1,error:`refused private address ${r}`}:{ok:!0,url:t,host:r,isLiteralIp:n!==0}}async function ot(e,{lookupFn:t=fo.promises.lookup}={}){let r=mo(e);if(!r.ok)return r;if(r.isLiteralIp)return{ok:!0,url:r.url,addresses:[{address:r.host,family:W.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=>!nt(o.address))?{ok:!1,error:`refused: ${r.host} resolves to a non-public address`}:{ok:!0,url:r.url,addresses:n}}async function it({requireUndici:e=!1,importUndici:t=()=>import("undici")}={}){let r,n;try{let c=await t();r=c.Agent,n=c.fetch}catch(c){if(e)throw new Error(`egress-guard: untrustedUrl pinning requires the undici package, which failed to load: ${c?.message||c}`);return null}if(typeof r!="function"||typeof 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=c=>String(c).toLowerCase().replace(/^\[|\]$/g,"").replace(/\.+$/,""),i=new Map,s=c=>(Array.isArray(c)?c:[c]).map(f=>typeof f=="string"?{address:f}:f).filter(f=>f&&f.address).map(f=>({address:f.address,family:f.family||(W.isIPv6(f.address)?6:4)})),d=(c,f,u)=>{i.set(o(c),s(typeof f=="string"?[{address:f,family:u}]:f))},a=c=>{let f=o(c);if(W.isIP(f))return[{address:f,family:W.isIPv6(f)?6:4}];let u=i.get(f);if(!u||!u.length)throw new Error(`refused: unpinned host ${c} during pinned fetch`);return u},p=new r({connect:{lookup(c,f,u){let b;try{b=a(c)}catch(w){return u(w)}return f?.all?u(null,b):u(null,b[0].address,b[0].family)}}}),m=ho((c,f={})=>n(c,{...f,dispatcher:p}),d);return{dispatcher:p,fetch:m,pin:d,resolve:a,async close(){try{await p.destroy()}catch{}}}}function ho(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[st]=Object.freeze({pin:t}),e}function at(e){return typeof e=="function"&&typeof e[st]?.pin=="function"}function or(e,t,r){if(!at(e))throw new Error("pinFetchToAddresses: fetchImpl is not pin-capable");e[st].pin(t,r)}var po,st,ir=l(()=>{po=new Set(["localhost","metadata.google.internal","metadata.goog"]);st=Symbol.for("oracle.egressGuard.pinCapableFetch")});import{createHash as sr}from"node:crypto";function Eo(e){let t=String(e||"").toLowerCase();return pr.includes(t)||/(^|-)(api[-_]?key|key|token|secret|auth|authorization|session|cookie|signature|access)(-|$)/.test(t)}function xo(e){let t={};for(let[r,n]of Object.entries(e||{}))Eo(r)||(t[r]=n);return t}function So(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 Ao(e,t){return new URL(String(e)).origin===new URL(String(t)).origin}function lr(e){let t=String(e?.method||"");return t?!vo.test(t):!1}function Io(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}return Array.isArray(r)?r.length>0&&r.every(lr):!r||typeof r!="object"?!1:r.jsonrpc&&r.method?lr(r):typeof r.type=="string"&&ko.has(r.type)&&r.action==null&&r.signature==null&&r.nonce==null}function To(e,t,r,n={},o=null){let i={};for(let[f,u]of Object.entries(r||{}))i[f.toLowerCase()]=u;let s=Object.keys(i).filter(f=>/(^|-)(api[-_]?key|key|token|secret|auth|authorization|session|cookie|signature|access)(-|$)/.test(f)),a=[...new Set([...pr,...s])].sort().map(f=>`${f}=${i[f]??""}`).join(`
|
|
2
|
+
`),p=sr("sha256").update(a).digest("hex").slice(0,32),m=`${n.untrustedUrl?"untrusted":"trusted"}:${n.maxResponseBytes??"unbounded"}`,c=o==null?"-":sr("sha256").update(String(o)).digest("hex").slice(0,32);return`${e} ${t} ${m} ${p} ${c}`}function Oo(e,t){let r=Number(t);return Number.isFinite(r)&&r>0?Math.min(r*1e3,cr):Math.min(250*2**e,cr)+Math.floor(Math.random()*100)}function ue(e,t={}){let r=new Error(e);return r.retryable=!1,Object.assign(r,t),r}function ut(e,t,r){return ue(`HTTP response from ${e} exceeded maxResponseBytes ${r} (${t})`,{oversize:!0})}function le(e){try{let t=e?.body?.cancel?.();t&&typeof t.then=="function"&&t.catch(()=>{})}catch{}}function Co(e){return e?e.byteLength??e.length??0:0}async function dr(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&&(le(e),!n))throw ut(r,`content-length ${i}`,t);let s=e.body?.getReader?.();if(!s){let c=await e.text(),f=Buffer.byteLength(c,"utf8");if(f>t){if(!n)throw ut(r,`body ${f} bytes`,t);return Buffer.from(c,"utf8").subarray(0,t).toString("utf8")}return c}let d=[],a=0,p=!1;try{for(;;){let{value:c,done:f}=await s.read();if(f)break;if(c&&(d.push(Buffer.from(c)),a+=Co(c),a>t)){p=!0;break}}}finally{if(p)try{await s.cancel()}catch{}try{s.releaseLock?.()}catch{}}if(p&&(typeof o=="function"&&o(),!n))throw ut(r,`streamed ${a} bytes`,t);let m=Buffer.concat(d);return(p?m.subarray(0,t):m).toString("utf8")}function fr(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}async function No(e,{fetchImpl:t,method:r,headers:n,body:o,timeoutMs:i,lookupFn:s,realFetch:d,untrustedUrl:a=!1,maxResponseBytes:p=null,importUndici:m,validateResponse:c,signal:f}){let u=new AbortController,b=setTimeout(()=>u.abort(),i),w=f?typeof AbortSignal.any=="function"?AbortSignal.any([f,u.signal]):f:u.signal,h=null,I=t,O=s?{lookupFn:s}:{};if(a&&!d&&!at(I))throw ue(`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 g=async(y,{status:x=null}={})=>{let v=await ot(y,O);if(!v.ok)throw ue(x==null?`HTTP refused ${y}: ${v.error}`:`HTTP redirect to ${y} ${v.error}`,x==null?{}:{status:x});let E=new URL(y).hostname;if(d){if(h&&(await h.close(),h=null),!h)try{h=await it({requireUndici:!0,...m?{importUndici:m}:{}})}catch(_){throw ue(x==null?`HTTP refused ${y}: ${_?.message||_}`:`HTTP redirect to ${y} refused: ${_?.message||_}`,x==null?{}:{status:x})}h.pin(E,v.addresses),I=h.fetch}else or(I,E,v.addresses);return v};try{let y=String(e),x={...n||{}};a&&await g(y);for(let v=0;v<=ur;v+=1){let E=await I(y,{method:r,headers:x,body:o,signal:w,redirect:"manual"});if(yo.has(E.status)){if(r!=="GET"&&r!=="HEAD"){let L=await dr(E,p??bo,{url:y,truncate:!0}),M=new Error(`HTTP ${E.status} ${r} ${y} redirected non-idempotent request`);throw M.status=E.status,M.body=fr(L)??L.slice(0,300),M}if(v===ur)throw le(E),new Error(`HTTP redirect loop for ${e}`);let C=E.headers?.get?.("location"),B;try{B=So(C,y)}catch(L){throw le(E),L}let D=!Ao(B,y);if(le(E),D&&(x=xo(x)),a)await g(B,{status:E.status});else if(D){let L=await ot(B,O);if(!L.ok){let M=new Error(`HTTP redirect from ${y} ${L.error}`);throw M.status=E.status,M.retryable=!1,M}d&&L.addresses?.length&&(h||(h=await it(m?{importUndici:m}:{})),h&&(h.pin(new URL(B).hostname,L.addresses),I=h.fetch))}y=B;continue}if(typeof c=="function")try{await c(E,{url:y})}catch(C){throw le(E),ue(C?.message||String(C))}let _=await dr(E,p,{url:y,onOversize:()=>u.abort()}),K=fr(_);if(!E.ok){let C=new Error(`HTTP ${E.status} ${r} ${y}`);throw C.status=E.status,C.retryAfter=E.headers?.get?.("retry-after")??null,C.body=K??_.slice(0,300),C}return K??_}throw new Error(`HTTP redirect loop for ${e}`)}finally{clearTimeout(b),h&&await h.close()}}async function Ne(e,t={}){let r=t.fetchImpl||globalThis.fetch;if(typeof r!="function")throw new Error("fetch unavailable \u2014 pass opts.fetchImpl");let n=t.timeoutMs??12e3,o=(t.method||"GET").toUpperCase(),i={Accept:"application/json",...t.headers||{}},s=t.body;s!=null&&typeof s!="string"&&(i["Content-Type"]=i["Content-Type"]||"application/json",s=JSON.stringify(s));let d=Number.isInteger(t.retries)?Math.max(t.retries,0):go,a=t.lookupFn,p=!t.fetchImpl,m=t.untrustedUrl===!0,c=t.importUndici,f=t.validateResponse,u=t.signal,b=Number(t.maxResponseBytes),w=Number.isFinite(b)&&b>0?Math.floor(b):null,h=async()=>{let x;for(let v=0;v<=d;v++){u?.throwIfAborted?.();try{return await No(e,{fetchImpl:r,method:o,headers:i,body:s,timeoutMs:n,lookupFn:a,realFetch:p,untrustedUrl:m,maxResponseBytes:w,importUndici:c,validateResponse:f,signal:u})}catch(E){x=E;let _=E?.status,K=E?.name==="AbortError"||E?.name==="TimeoutError"||u?.aborted,C=new Set([408,425,429]),B=E?.retryable===!1?!1:_!=null?C.has(_)||wo.has(_)&&ar.has(o):!K&&ar.has(o);if(v===d||!B)throw E;let D=Oo(v,E?.retryAfter);u?await new Promise((L,M)=>{let Tn=setTimeout(L,D);u.addEventListener("abort",()=>{clearTimeout(Tn),M(u.reason||new DOMException("Aborted","AbortError"))},{once:!0})}):await _o(D)}}throw x};if(!(t.dedupe!==!1&&!u&&Io(o,s)))return h();let O=To(o,e,i,{untrustedUrl:m,maxResponseBytes:w},s),g=ct.get(O);if(g)return g;let y=h().finally(()=>ct.delete(O));return ct.set(O,y),y}var wo,ar,go,cr,pr,yo,ur,bo,ct,vo,ko,_o,Re=l(()=>{ir();wo=new Set([408,425,429,500,502,503,504]),ar=new Set(["GET","HEAD","OPTIONS","PUT","DELETE"]),go=2,cr=4e3,pr=["authorization","x-api-key","x-tensor-api-key","0x-api-key","api-key","cookie","proxy-authorization"],yo=new Set([301,302,303,307,308]),ur=3,bo=64*1024;ct=new Map,vo=/(?:^|_)(send|submit|broadcast|sign|requestAirdrop)(?=[A-Z_]|$)/i,ko=new Set(["allMids","l2Book","outcomeMeta","spotClearinghouseState","userFills","meta","metaAndAssetCtxs","perpDexs","candleSnapshot","fundingHistory","openOrders","frontendOpenOrders","clearinghouseState","spotMeta","validatorSummaries","delegatorSummary","delegations","delegatorRewards","delegatorHistory","maxBuilderFee"]);_o=e=>new Promise(t=>setTimeout(t,e))});var mr=l(()=>{Re()});var hr=l(()=>{mr()});var _c,Cc,dt=l(()=>{z();hr();_c=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"}),Cc=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 Lc,ft=l(()=>{z();Lc="0x"+"00".repeat(32)});var Ro,Fc,pt=l(()=>{ft();z();Ro=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),Fc=Object.freeze(Ro.map(e=>e[0]))});var Le=l(()=>{z()});import{TypedDataEncoder as zc,getAddress as Hc,isAddress as Wc}from"ethers";var $o,Po,br=l(()=>{Oe();$o=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),Po=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 Vc,Er=l(()=>{Vc=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"})});var xr=l(()=>{});import{TypedDataEncoder as ru,getAddress as nu,isAddress as ou}from"ethers";var Bo,du,Do,fu,Sr=l(()=>{Re();Te();Er();xr();Oe();Bo=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),du=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"}),Do=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"}]}),fu=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]})});import{TypedDataEncoder as hu,getAddress as wu}from"ethers";var bu,mt=l(()=>{br();Sr();bu=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"])});import{Interface as vr}from"ethers";var zo,Bu,Ho,Du,Fu,Mu,ju,Wo,qu,$e=l(()=>{H();Te();Oe();_e();et();tt();dt();pt();Le();mt();zo=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]),Bu=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}),Ho=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"}}),Du=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),Fu=new vr(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),Mu=new vr(["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"]),ju=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"}}),Wo=Object.freeze([...zo]),qu=Object.freeze({...Ho})});import{encode as Hu}from"@msgpack/msgpack";import{keccak256 as Gu,verifyTypedData as Ju}from"ethers";var Vu,Ku,ht=l(()=>{Vu=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Ku=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]})});var wt=l(()=>{Le()});import{ed25519 as nl}from"@noble/curves/ed25519.js";import{base58 as il}from"@scure/base";import{RawTx as al,SigHash as cl,Transaction as ul}from"@scure/btc-signer";import{Transaction as dl,keccak256 as fl,verifyTypedData as pl}from"ethers";var gt=l(()=>{ht();wt()});import{base58 as El}from"@scure/base";var Pe=l(()=>{$e();_e();H();gt()});var Ir=l(()=>{Pe();$e()});var Rl,Ll,$l,re=l(()=>{Rl=Object.freeze({N:1<<17,r:8,p:1}),Ll=256*1024*1024,$l=16*1024});var Bl,Tr=l(()=>{Bl=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 yt}from"node:os";import{join as bt}from"node:path";var Or,Vo,jl,_r=l(()=>{Or=process.env.ORACLE_PUBLIC_DESKTOP==="1",Vo=Or?process.env.ORACLE_CONFIG_DIR||bt(yt(),".config","oracle"):bt(yt(),".config","oracle"),jl=Or?Vo:bt(yt(),".config","mad-desk")});var Wl,Gl,Jl,Cr=l(()=>{_r();Wl="0".repeat(64),Gl=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"}),Jl=Promise.resolve()});var Et=l(()=>{Cr();z();re();Pe()});var Rr=l(()=>{});var Pr={};xe(Pr,{SIGN_TIME_REVIEW_VERSION:()=>Ko,SignTimeReviewSecretError:()=>de,createSignTimeReview:()=>$r});function xt(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string"){let o=e.trim().split(/\s+/);if(ei.test(e)||ti.has(o.length)&&o.every(i=>/^[a-z]+$/i.test(i)))throw new de(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)=>xt(o,`${t}[${i}]`,r));G(e,t);let n={};for(let o of Object.keys(e).sort()){let i=o.replace(/[^a-z0-9]/gi,"");if(Zo.test(i))throw new de(`${t}.${o}`);e[o]!==void 0&&(n[o]=xt(e[o],`${t}.${o}`,o))}return n}function G(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 fe(e,t){if(e==null||e==="")throw new TypeError(`sign-time review: ${t} required`);return e}function ne(e,t){let r=String(fe(e,t)).toLowerCase();if(!Yo.test(r))throw new TypeError(`sign-time review: ${t} must be an EVM address`);return r}function j(e,t,{positive:r=!1}={}){try{let n=BigInt(fe(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 St(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 Lr(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))Lr(t);Object.freeze(e)}return e}function ri(e,t){if(typeof e=="boolean")return{passed:e,reason:e?"passed":"failed"};G(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:St(String(n),`${t}.reason`)}}function ni(e){if(!Array.isArray(e))throw new TypeError("sign-time review: policyChecks must be an array");let t=e.map((n,o)=>ri(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 oi(e){if(e==null)return null;if(G(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:St(String(e.summary??"simulation result recorded"),"simulation.summary")};return e.gasEstimate!=null&&(t.gasEstimate=j(e.gasEstimate,"simulation.gasEstimate")),e.gasLimit!=null&&(t.gasLimit=j(e.gasLimit,"simulation.gasLimit")),t}function ii(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)=>{G(t,`assetDeltas[${r}]`);let n=j(t.before,`assetDeltas[${r}].before`),o=j(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:St(String(fe(t.asset??t.token,`assetDeltas[${r}].asset`)),`assetDeltas[${r}].asset`),before:n,after:o,delta:s}})}function si(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)=>{G(t,`approvalDeltas[${r}]`);let n=j(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 $r(e={}){G(e,"input");let t=xt(e),r=t.tx==null?t:G(t.tx,"tx"),n=j(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(fe(t.prepareHash,"prepareHash")).toLowerCase();if(!Qo.test(s))throw new TypeError("sign-time review: prepareHash must be a 32-byte hash");let d=t.route??t.venue;if(d==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 p=String(fe(t.calldata??t.data??r.data,"calldata/data")).toLowerCase();if(!Xo.test(p))throw new TypeError("sign-time review: calldata/data must be even-length hex");let m=t.policyChecks!==void 0&&t.policyChecks!==null,c=ni(m?t.policyChecks:[]),f=oi(t.simulation),u=ii(t.assetDeltas),b=si(t.approvalDeltas),w=t.allowlistHits??[];if(!Array.isArray(w))throw new TypeError("sign-time review: allowlistHits must be an array");let h=f?.willRevert===!0||["failed","error"].includes(f?.status),I=f!=null&&f.willRevert===!1&&["ok","success"].includes(f.status),O=h||c.failed>0?"BLOCKED":I&&m&&c.checks.length>0&&u!=null?"READY":"UNKNOWN",g=typeof a=="string"?a:a.method??a.action??a.type??"transaction",y=`${O}: review ${g} on chain ${n}; policy ${c.passed} passed, ${c.failed} failed; ${u?.length??0} asset delta${u?.length===1?"":"s"}; local signature required`,x={reviewVersion:1,status:O,requiresLocalSignature:!0,signingLocal:!0,custody:"none",execution:"review-only",chainId:n,account:o,from:o,route:d,venue:t.venue??(typeof d=="string"?d:d.venue??d.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:p,data:p,selector:p.length>=10?p.slice(0,10):null,value:j(t.value??r.value??0,"value"),...(t.gasEstimate??r.gasEstimate)==null?{}:{gasEstimate:j(t.gasEstimate??r.gasEstimate,"gasEstimate")},...(t.gasLimit??r.gasLimit)==null?{}:{gasLimit:j(t.gasLimit??r.gasLimit,"gasLimit")},simulation:f,policyChecks:c,allowlistHits:w,assetDeltas:u,approvalDeltas:b,summary:y};return Lr(x)}var Ko,Yo,Xo,Qo,Zo,ei,ti,de,At=l(()=>{Ko=1,Yo=/^0x[0-9a-f]{40}$/,Xo=/^0x(?:[0-9a-f]{2})*$/,Qo=/^(?:0x)?[0-9a-f]{64}$/,Zo=/(privatekey|privkey|secretkey|seedphrase|mnemonic|passphrase|password|keystore|keymaterial|wif|xprv|xpriv|bearer|authorization|signature|apikey|credential)/i,ei=/\b(?:[5KL][1-9A-HJ-NP-Za-km-z]{50,51}|xprv[0-9A-Za-z]{50,})\b/,ti=new Set([12,15,18,21,24]),de=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 nd,readdirSync as od,existsSync as ai}from"node:fs";import{dirname as ci,join as pe}from"node:path";import{fileURLToPath as ui}from"node:url";function li(){let e=[pe(me,"descriptors"),pe(me,"clear-sign","descriptors"),pe(me,"..","clear-sign","descriptors"),pe(me,"..","..","clear-sign","descriptors"),pe(me,"..","..","..","clear-sign","descriptors")];for(let t of e)if(ai(t))return t;return e[0]}var me,cd,ud,Br=l(()=>{H();me=ci(ui(import.meta.url));cd=li(),ud=(1n<<256n)-1n});var Dr=l(()=>{At();H();Br()});import{Wallet as gd}from"ethers";import{base58 as bd}from"@scure/base";import{ed25519 as xd}from"@noble/curves/ed25519.js";import{NETWORK as Ad,TEST_NETWORK as vd,WIF as kd,p2wpkh as Id}from"@scure/btc-signer";import{pubECDSA as Od}from"@scure/btc-signer/utils.js";var Fr=l(()=>{});var Nd,Rd,Ld,$d,Pd,Bd,Dd,Fd,Md,jd,qd,Mr=l(()=>{Et();Nd=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),Rd=Object.freeze(["binance","bybit","okx","coinbase"]),Ld=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),$d=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),Pd=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),Bd=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),Dd=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),Fd=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),Md=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),jd=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),qd=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"})});var jr=l(()=>{re()});var pi,qr,De=l(()=>{pi=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}"]})}),qr=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"})});var Ur=l(()=>{De()});var Xd,zr=l(()=>{De();Ur();Xd=256*1024});var Hr=l(()=>{De();zr()});var Wr=l(()=>{re()});import N from"node:path";import mi from"node:os";import{createHash as hi,randomBytes as Uf}from"node:crypto";import{Interface as vt,keccak256 as Hf}from"ethers";import{Transaction as Gf}from"@scure/btc-signer";import{ed25519 as Vf}from"@noble/curves/ed25519.js";function Gr(e){let t=process.env.ORACLE_SIGNER_STATE_DIR||N.join(process.env.XDG_STATE_HOME||N.join(mi.homedir(),".local","state"),"oracle"),r=hi("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`),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`)}}var Sp,Ap,vp,Jr=l(()=>{Ir();Pe();re();Tr();Et();Rr();H();Dr();$e();_e();gt();dt();pt();Le();wt();ft();ht();et();tt();mt();Fr();Mr();jr();Hr();Wr();Sp=new vt(["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"]),Ap=new vt(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),vp=new vt(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"])});import kt from"node:fs";import Vr from"node:path";import{homedir as wi}from"node:os";function gi(){return process.env.ORACLE_CONFIG_DIR||Vr.join(wi(),".config","oracle")}function he(){let e=Gr(Vr.join(gi(),"signer")),t=kt.existsSync(e.vault),r=kt.existsSync(e.lock),n=t?r?"disarmed":"armed-owner-confirmed":"inert-no-key";return{vaultExists:t,policyConfigured:kt.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 Pp,It=l(()=>{Ke();Zt();Jr();re();Pp=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_ack",description:"Execute one pending artifact through the armed local signer (same path as Telegram Allow). Fails if the signer is not running or disarmed. Never holds keys.",parameters:{type:"object",properties:{id:{type:"string"},digest:{type:"string"}},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}}}])});function Fe(e){return String(e||"").trim()||void 0}function bi(e,{required:t=!1}={}){let r=Fe(e)?.toLowerCase();if(!r){if(t)throw new Error("model provider is required");return}if(!yi.has(r))throw new Error(`unsupported provider: ${r}`);return r}function Ei(e,{required:t=!1}={}){let r=Fe(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 xi(e){let t=Fe(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 Kr({provider:e,model:t,baseUrl:r}={},{requireModel:n=!1}={}){let o=bi(e),i=Ei(t,{required:n});if(o==="custom")return{provider:o,...i?{model:i}:{},baseUrl:xi(r)};if(Fe(r))throw new Error("baseUrl is only supported for the custom provider");return{...o?{provider:o}:{},...i?{model:i}:{}}}var yi,Yr=l(()=>{yi=new Set(["openrouter","openai","anthropic","xai","deepseek","gemini","kimi","mistral","nous","qwen","glm","local","ollama","custom","anthropic-oauth","openai-codex","xai-oauth"])});import Xr from"node:fs";import Si from"node:path";function vi(){return Si.join(Q(),"model.json")}function oe(e){return String(e||"").trim()||void 0}function ki(e={}){let t=oe(e.backend)?.toLowerCase()||"auto",r=Kr({provider:e.provider,model:e.model,baseUrl:e.baseUrl},{requireModel:t==="standalone"}),n=oe(e.apiKeyEnv),o=Number.parseInt(String(e.contextLength||""),10),i=oe(e.reasoningEffort),s=oe(e.computeHost||e.remoteHost),d=oe(e.computeUser||e.remoteUser),a=oe(e.computePath||e.remotePath);if(!Ai.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}:{},...d?{computeUser:d}:{},...a?{computePath:a}:{}}}function Qr(){let e=vi();if(!Xr.existsSync(e))return null;try{return ki(JSON.parse(Xr.readFileSync(e,"utf8")))}catch{return null}}var Ai,Zr=l(()=>{Ae();Yr();Ai=new Set(["auto","standalone","hermes","remote","arch"])});import{Interface as Ii,getAddress as Ti}from"ethers";function Tt(e,t){try{return Ti(e).toLowerCase()}catch{throw new Error(`${t} must be a valid EVM address`)}}function Oi(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 Ot(e){return e==null?null:Number.parseInt(String(e),16)}function Ci(e,{rpcUrl:t,env:r=process.env}={}){if(t)return t;let n=Qt(e,r);return n||_i[Number(e)]||null}function Ri(e){let t=String(e||""),r=t.toLowerCase();if(t!==t.trim()||!/^[a-zA-Z0-9_]+$/.test(t)||!Ni.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 Li(e){let t=new Error(e?.message||JSON.stringify(e));return t.code=e?.code,t}function $i(e){if(e?.error)throw Li(e.error);return e?.result}function Pi(e,t,r){return`${e}
|
|
3
3
|
${t}
|
|
4
|
-
${JSON.stringify(r??[])}`}async function $i(e,t,r){return _e(e,{method:"POST",body:t,fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3,signal:r.signal})}async function Tt(e,t,r=[],n={}){let o=String(t||""),i=Ci(o),s=Oi(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 m=Qr.get(s);if(m!=null)return m}let a=n.dedupe!==!1&&!n.signal?Li(s,o,r):null;if(a&&me.has(a))return me.get(a);let p=(async()=>{let m=await $i(s,{jsonrpc:"2.0",id:1,method:t,params:r},n),c=Ri(m);return i==="eth_chainid"&&typeof c=="string"&&Qr.set(s,c),c})();return a&&(me.set(a,p),p.finally(()=>{me.get(a)===p&&me.delete(a)}).catch(()=>{})),p}async function Zr(e={},t={}){let r=Number(e.chainId??t.chainId??1),n=Ii(e.txHash||e.hash||e.transactionHash),o=await Tt(r,"eth_getTransactionReceipt",[n],t);if(!o)return{ok:!1,chainId:r,txHash:n,status:"pending",receipt:null,reason:"receipt pending"};let i=It(o.status),s=i===1,d=i===1?"success":i===0?"reverted":"unknown",a=s?null:d==="reverted"?"transaction reverted":"unknown receipt status",p=e.expectedTo?kt(e.expectedTo,"expectedTo"):null,m=o.to?kt(o.to,"receipt.to"):null;return p&&m!==p&&(s=!1,a=`to mismatch: expected ${p}, got ${m||"null"}`),{ok:s,chainId:r,txHash:n,status:d,reason:a,statusCode:i,to:m,from:o.from?kt(o.from,"receipt.from"):null,blockNumber:It(o.blockNumber),transactionIndex:It(o.transactionIndex),logs:Array.isArray(o.logs)?o.logs:[],receipt:o}}var Up,Ti,_i,me,Qr,en=l(()=>{Ce();Ge();Up=new vi(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);Ti={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"};_i=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/;me=new Map,Qr=new Map});import{wordlists as Pi}from"ethers";function Mi(e){let t=String(e).trim().toLowerCase().split(/\s+/).filter(Boolean);return Di.has(t.length)&&t.every(r=>Pi.en.getWordIndex(r)>=0)}function zi(e){let t=tn(e);return Ui.has(t)||qi.test(t)}function tn(e){return String(e).replace(/[^a-z0-9]/gi,"").toLowerCase()}function Hi(e){let t=tn(e);return[...Bi].some(r=>t.includes(r))}function Wi(e,t,r){if(typeof t=="string"){if(Fi.some(n=>n.test(t))||Mi(t))throw new he(r);if(ji.test(t)&&!zi(e))throw new he(r)}}function Ot(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string")return Wi(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)=>Ot(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(Hi(o))throw new he(i);e[o]!==void 0&&(n[o]=Ot(e[o],i,o))}return n}function rn(e){return Ot(e)}var Bi,Fi,Di,ji,qi,Ui,he,_t=l(()=>{Bi=new Set(["privatekey","privkey","secretkey","seedphrase","seed","mnemonic","passphrase","password","keystore","keymaterial","wif","xprv","xpriv","bearer","authorization","signature","apikey","credential"]),Fi=[/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/,/\bxprv[0-9A-Za-z]{50,}\b/],Di=new Set([12,15,18,21,24]);ji=/^\s*(?:0x)?[0-9a-fA-F]{64}\s*$/,qi=/(hash|digest|root|salt|nonce|proof|commitment|sig|id)(?:e?s)?$/i,Ui=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"}}});var Gp,Jp,Vp,nn=l(()=>{Gp=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),Jp=Object.freeze(["read","simulate"]),Vp=1440*60});function Ct(e){let t=String(e),r=t.toLowerCase().replace(/[\s._-]+/g,"");return Gi.test(t)||Ji.includes(r)}function Vi(e){return e.replace(/"([A-Za-z0-9_-]+)"\s*:\s*"(?:0x)?([0-9a-fA-F]{64})"/g,(t,r)=>sn.includes(String(r).toLowerCase().replace(/[_-]/g,""))?`"${r}":"<hex64>"`:t)}function an(e){let t;try{t=JSON.stringify(e)}catch(o){throw new q("$",`unserializable-payload: ${String(o?.message||o)}`)}if(t===void 0)return"null";let r=Vi(t);for(let{rule:o,re:i}of on)if(i.test(r))throw new q("$<serialized>",o);if(/(?:^|[^0-9a-fA-Fx])0x[0-9a-fA-F]{64}(?![0-9a-fA-F])/.test(r))throw new q("$<serialized>","raw-32-byte-hex-embedded");return JSON.parse(t,(o,i)=>{if(o&&Ct(o))throw new q(`$<serialized>.${o}`,"forbidden-key-name");return i}),t}function J(e,t="$",r=new Set,n=""){if(e==null)return e;if(typeof e=="string"){let o=sn.includes(String(n).toLowerCase().replace(/[_-]/g,""));for(let{rule:i,re:s}of on)if(!(o&&i.startsWith("raw-32-byte-hex"))&&s.test(e))throw new q(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"&&Ct(o))throw new q(`${t}[${JSON.stringify(o)}]`,"forbidden-key-name");J(o,`${t}[key]`,r),J(i,`${t}[${String(o)}]`,r)}return e}if(e instanceof Set){let o=0;for(let i of e.values())J(i,`${t}[${o++}]`,r);return e}if(Array.isArray(e))return e.forEach((o,i)=>J(o,`${t}[${i}]`,r)),e;for(let[o,i]of Object.entries(e)){if(Ct(o))throw new q(`${t}.${o}`,"forbidden-key-name");J(i,`${t}.${o}`,r,o)}return e}var q,Gi,Ji,on,sn,cn=l(()=>{nn();q=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}},Gi=/(private[_-]?key|secret|bearer|keystore|mnemonic|seed[_-]?phrase|passphrase|password|api[_-]?key|access[_-]?token|auth[_-]?token|session[_-]?token|signer[_-]?url|signature)/i,Ji=Object.freeze(["privkey","wif","xprv","seed"]);on=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}]),sn=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"])});function Nt(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 Rt(e,t="control input"){try{J(e,t),an(e)}catch(r){throw new TypeError(`${t} contains secret or custody material: ${r.message}`)}return e}function we(e,{required:t=[],optional:r=[]}={},n="object"){Nt(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 Lt(e,t,r=200,{lower:n=!1}={}){if(typeof e!="string"||!e.trim()||e.length>r||Ki.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 ge(e,t,r=80){let n=Lt(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 Fe(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 R(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))R(t);Object.freeze(e)}return e}var Ki,$t=l(()=>{_t();cn();Ki=/[\u0000-\u001f\u007f]/});function un({family:e,chainId:t},r="chain"){let n=ge(e,`${r}.family`,40),o;if(n==="evm"){if(typeof t=="number")o=String(Fe(t,`${r}.chainId`,{positive:!0}));else if(o=Lt(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=ge(t,`${r}.chainId`,80);return{family:n,chainId:o}}function Qi(e,t="chain"){return we(e,{required:["family","chainId"]},t),R(un(e,t))}function ln(e,t="finality rule"){Rt(e,t),Nt(e,t);let r=e.rule;if(!Yi.includes(r))throw new TypeError(`${t}.rule must be confirmations, finalizedTag, or checkpoint`);let n=r==="confirmations"?"confirmations":r;we(e,{required:["family","chainId","rule",n]},t);let o=un(e,t);return r==="confirmations"?{...o,rule:r,confirmations:Fe(e.confirmations,`${t}.confirmations`,{positive:!0})}:{...o,rule:r,[n]:ge(e[n],`${t}.${n}`,80)}}function Pt(e){if(!Array.isArray(e))throw new TypeError("finality policy rules must be an array");let t=e.map((n,o)=>ln(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 R({policyVersion:1,rules:t})}function Zi(e){if(we(e,{required:["policyVersion","rules"]},"finality policy"),e.policyVersion!==1||!Array.isArray(e.rules))throw new TypeError("unsupported finality policy");return Pt(e.rules)}function dn(e,t){let r=Qi(t,"finality query"),o=Zi(e).rules.find(i=>i.family===r.family&&i.chainId===r.chainId);return o?R({status:"KNOWN",...r,rule:o}):R({status:V.UNKNOWN,reason:"MISSING_FINALITY_RULE",...r,rule:null})}function es(e,t){if(e==null)return null;Rt(e,"finality evidence");let r=t.rule==="confirmations"?"confirmations":t.rule;if(we(e,{required:["status"],optional:[r]},"finality evidence"),!Xi.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"?Fe(e.confirmations,"finality evidence.confirmations",{positive:!0}):ge(e[r],`finality evidence.${r}`,80)),n}function fn(e,t){if(!e||e.status===V.UNKNOWN||e.rule==null)return R({status:V.UNKNOWN,final:!1,reason:"MISSING_FINALITY_RULE"});let r=ln(e.rule??e,"resolved finality rule"),n=es(t,r);if(n==null)return R({status:V.UNKNOWN,final:!1,reason:"MISSING_FINALITY_EVIDENCE"});if(n.status!=="LIVE")return R({status:V.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,R({status:o?V.FINAL:V.INCLUDED,final:o,reason:o?"PINNED_RULE_SATISFIED":"PINNED_RULE_NOT_SATISFIED",rule:r})}var Yi,V,Xi,pn=l(()=>{$t();Yi=Object.freeze(["confirmations","finalizedTag","checkpoint"]),V=Object.freeze({UNKNOWN:"UNKNOWN",INCLUDED:"INCLUDED",FINAL:"FINAL"}),Xi=Object.freeze(["LIVE","STALE","UNKNOWN","UNAVAILABLE"])});function rs(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 Ft(e){return e==null?e:Array.isArray(e)?e.map(Ft):ye(e)?Object.fromEntries(Object.keys(e).sort().map(t=>[t,Ft(e[t])])):String(e)}function ns(e,t,r,n){let o=A(e.finalityEvidence,n?.finality,e.evidence),i=A(e.finalityPolicy,e.policy);try{return i==null&&ye(e.finalityRule)&&(i=Pt([{family:t,chainId:r,...e.finalityRule}])),i==null||t==null||r==null?{status:"UNKNOWN",final:!1,reason:"MISSING_FINALITY_RULE"}:fn(dn(i,{family:t,chainId:r}),o)}catch{return{status:"UNKNOWN",final:!1,reason:"MALFORMED_FINALITY_EVIDENCE"}}}function T(e,t,r){r!=null&&(e[t]=r)}function os(e){return e==null?null:String(e).trim().toLowerCase()}function Bt(...e){let t=e.map(os).filter(Boolean);return t.length<=1||t.every(r=>r===t[0])}function hn(e={}){if(!ye(e))throw new TypeError("verified receipt: input object required");let t=rn(e),r=A(t.actionReceipt,t.receipt),n=ye(r)?r:t,o=A(t.observation,t.chainObservation,t.observedReceipt),i=ye(o),s=A(t.txHash,n.txHash,n.transactionHash,o?.txHash,o?.transactionHash),d=A(t.family,n.family,n.chain?.family,o?.family,o?.chain?.family),a=A(t.chainId,n.chainId,n.chain?.chainId,o?.chainId,o?.chain?.chainId),p=!Bt(t.txHash,n.txHash,n.transactionHash,o?.txHash,o?.transactionHash)||!Bt(t.family,n.family,n.chain?.family,o?.family,o?.chain?.family)||!Bt(t.chainId,n.chainId,n.chain?.chainId,o?.chainId,o?.chain?.chainId),m=ns(t,d,a,i&&!p?o:null),c=rs(A(o?.receiptStatus,o?.executionStatus,o?.status)),f=A(t.reconciliationStatus,t.reconciliation?.status,o?.reconciliationStatus),u=A(t.finalityState,t.finalityEvidence?.status,t.evidence?.status,o?.finalityState),b="UNKNOWN";mn(f)||!p&&(i&&c==="FAIL"||mn(u))?b="FAIL":!p&&s&&i&&c==="SUCCESS"&&["INCLUDED","FINAL"].includes(m.status)&&(b="SUCCESS");let w={verifiedReceiptVersion:ts,status:b};p&&(w.reason="REFERENCE_MISMATCH"),T(w,"txHash",s),T(w,"chain",A(t.chain,n.chain,o?.chain)),T(w,"family",d),T(w,"chainId",a),T(w,"block",A(o?.block,t.block)),T(w,"blockState",A(o?.blockState,o?.inclusionState)),w.finalityState=m.status,T(w,"confirmations",A(o?.confirmations,o?.finality?.confirmations,t.finalityEvidence?.confirmations,t.evidence?.confirmations)),T(w,"observedAt",A(o?.observedAt,t.observedAt)),T(w,"route",A(t.route,n.route)),T(w,"prepareHash",A(t.prepareHash,n.prepareHash)),T(w,"policyOutcome",A(t.policyOutcome,n.policyOutcome,n.policyChecks));let h=A(t.balanceChanges,o?.balanceChanges,o?.balances,n.balanceChanges,n.balances);return h!=null&&(w.balanceChanges=Ft(h)),T(w,"createdAt",A(t.createdAt,n.createdAt)),T(w,"submittedAt",A(t.submittedAt,n.submittedAt)),T(w,"finalizedAt",A(t.finalizedAt,o?.finalizedAt)),T(w,"timestamps",A(t.timestamps,n.timestamps,o?.timestamps)),R(w)}var ts,pm,A,ye,wn=l(()=>{_t();pn();$t();ts=1,pm=Object.freeze(["SUCCESS","FAIL","UNKNOWN"]),A=(...e)=>e.find(t=>t!=null),ye=e=>!!e&&typeof e=="object"&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype});var yn={};be(yn,{observeEvmReceipt:()=>gn,verifyEvmReceipt:()=>as});function ss(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 gn({txHash:e,chainId:t,rpcUrl:r},n={}){let o=String(e||"").trim().toLowerCase();if(!is.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||Zr,d=n.rpcCall||Tt,a={...n.rpcOptions||{},...r?{rpcUrl:r}:{}},p;try{p=await s({txHash:o,chainId:i},a)}catch(u){return{observation:null,reason:`RPC_UNAVAILABLE: ${u.message}`}}if(!p||p.receipt==null)return{observation:null,reason:p?.reason||"receipt pending"};let m=null,c=p.blockNumber;if(Number.isSafeInteger(c))try{let u=ss(await d(i,"eth_blockNumber",[],a));u!=null&&u>=c&&(m=u-c+1)}catch{}let f={txHash:o,family:"evm",chainId:String(i),receiptStatus:p.status==="success"?"SUCCESS":p.status==="reverted"?"FAIL":"UNKNOWN",block:c==null?void 0:String(c),observedAt:new Date().toISOString(),finality:{status:"LIVE",...m==null?{}:{confirmations:m}}};return m!=null&&(f.confirmations=m),{observation:f,reason:null}}async function as({txHash:e,chainId:t,confirmations:r=1,rpcUrl:n},o={}){let{observation:i,reason:s}=await gn({txHash:e,chainId:t,rpcUrl:n},o),d=hn({txHash:String(e).trim().toLowerCase(),family:"evm",chainId:String(Number(t)),finalityRule:{rule:"confirmations",confirmations:r},...i?{observation:i}:{}});return{receipt:d,observed:!!i,final:d.finalityState==="FINAL",requiredConfirmations:r,reason:s}}var is,bn=l(()=>{en();wn();is=/^0x[0-9a-f]{64}$/});var En={};be(En,{classifyReceipt:()=>se,configDir:()=>ds,firstHourReport:()=>Dt,probeReceiptModule:()=>ps,probeReviewModule:()=>fs,venueMap:()=>De});import cs from"node:path";import{homedir as us}from"node:os";function ds(e=process.env){return e.ORACLE_CONFIG_DIR||cs.join(us(),".config","oracle")}function De({env:e=process.env,vault:t=null}={}){let r=t||pe(),n=[];for(let[o,i]of Object.entries(Ae)){let s=(i.rpcEnv||[]).some(a=>String(e[a]||"").trim()),d="prepare";i.evm?s&&(d="live"):d="unavailable",n.push({key:o,chainId:i.chainId,name:i.name,family:"evm",status:d,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 Dt({env:e=process.env,model:t=Yr(),vault:r=pe(),signerReachable:n=!1,quote:o=null,reviewAvailable:i=!1,receiptAvailable:s=!1}={}){let d=[],a=(u,b,w,h=null)=>d.push({id:u,status:b,detail:w,fix:h}),p=(()=>{let[u,b]=process.versions.node.split(".").map(Number);return u>20||u===20&&b>=19})();a("node",p?"ok":"fail",`node ${process.versions.node}`,p?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 m=e.ORACLE_SIGNER_HOST||"127.0.0.1";if(ls.has(m)?a("signer",n?"ok":"warn",n?`loopback ${m}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",n?null:"oracle signer"):a("signer","fail",`signer host ${m} is not loopback`,"unset ORACLE_SIGNER_HOST"),!o)a("quote","warn","quote not probed",null);else if(o.ok){let u=String(o.detail||"net quote returned");a("quote","ok",u.length>140?`${u.slice(0,140)}\u2026`:u)}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 c=d.some(u=>u.status==="fail"),f=d.filter(u=>u.status==="ok").length;return{ok:!c,checks:d,firstRunScore:{ok:f,total:d.length,label:`${f}/${d.length} first-run hops green`},venues:De({env:e,vault:r})}}async function fs(){try{return typeof(await Promise.resolve().then(()=>(xt(),Lr))).createSignTimeReview=="function"}catch{return!1}}async function ps(){try{let e=await Promise.resolve().then(()=>(bn(),yn));return typeof e.observeReceipt=="function"||typeof e.default=="function"||Object.values(e).some(t=>typeof t=="function")}catch{return!1}}var ls,Mt=l(()=>{Ge();vt();Xr();Je();ls=new Set(["127.0.0.1","::1","localhost"])});var xn={};be(xn,{classifyReceipt:()=>se,default:()=>ws,firstHourReport:()=>Dt,probeQuote:()=>hs,probeSigner:()=>ms,vaultStatus:()=>pe});async function ms(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}}async function hs(){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:`${r.chainId} ${r.baseToken?.symbol}/${r.quoteToken?.symbol} $${r.priceUsd}`}}catch(e){return{ok:!1,detail:e instanceof Error?e.message:"quote failed"}}}var ws,Sn=l(()=>{Mt();vt();ws={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=De();if(t)return process.stdout.write(`${JSON.stringify({venues:r},null,2)}
|
|
4
|
+
${JSON.stringify(r??[])}`}async function Bi(e,t,r){return Ne(e,{method:"POST",body:t,fetchImpl:r.fetchImpl,timeoutMs:r.timeoutMs??12e3,signal:r.signal})}async function _t(e,t,r=[],n={}){let o=String(t||""),i=Ri(o),s=Ci(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 m=en.get(s);if(m!=null)return m}let a=n.dedupe!==!1&&!n.signal?Pi(s,o,r):null;if(a&&we.has(a))return we.get(a);let p=(async()=>{let m=await Bi(s,{jsonrpc:"2.0",id:1,method:t,params:r},n),c=$i(m);return i==="eth_chainid"&&typeof c=="string"&&en.set(s,c),c})();return a&&(we.set(a,p),p.finally(()=>{we.get(a)===p&&we.delete(a)}).catch(()=>{})),p}async function tn(e={},t={}){let r=Number(e.chainId??t.chainId??1),n=Oi(e.txHash||e.hash||e.transactionHash),o=await _t(r,"eth_getTransactionReceipt",[n],t);if(!o)return{ok:!1,chainId:r,txHash:n,status:"pending",receipt:null,reason:"receipt pending"};let i=Ot(o.status),s=i===1,d=i===1?"success":i===0?"reverted":"unknown",a=s?null:d==="reverted"?"transaction reverted":"unknown receipt status",p=e.expectedTo?Tt(e.expectedTo,"expectedTo"):null,m=o.to?Tt(o.to,"receipt.to"):null;return p&&m!==p&&(s=!1,a=`to mismatch: expected ${p}, got ${m||"null"}`),{ok:s,chainId:r,txHash:n,status:d,reason:a,statusCode:i,to:m,from:o.from?Tt(o.from,"receipt.from"):null,blockNumber:Ot(o.blockNumber),transactionIndex:Ot(o.transactionIndex),logs:Array.isArray(o.logs)?o.logs:[],receipt:o}}var Jp,_i,Ni,we,en,rn=l(()=>{Re();Ve();Jp=new Ii(["function allowance(address owner,address spender) view returns (uint256)","function balanceOf(address account) view returns (uint256)"]);_i={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"};Ni=/^(?:eth_(?:call|blocknumber|chainid|get[a-z0-9]+|feehistory|gasprice|maxpriorityfeepergas|syncing|protocolversion|estimategas|createaccesslist)|net_(?:version|listening|peercount)|web3_(?:clientversion|sha3))$/;we=new Map,en=new Map});import{wordlists as Di}from"ethers";function qi(e){let t=String(e).trim().toLowerCase().split(/\s+/).filter(Boolean);return ji.has(t.length)&&t.every(r=>Di.en.getWordIndex(r)>=0)}function Wi(e){let t=nn(e);return Hi.has(t)||zi.test(t)}function nn(e){return String(e).replace(/[^a-z0-9]/gi,"").toLowerCase()}function Gi(e){let t=nn(e);return[...Fi].some(r=>t.includes(r))}function Ji(e,t,r){if(typeof t=="string"){if(Mi.some(n=>n.test(t))||qi(t))throw new ge(r);if(Ui.test(t)&&!Wi(e))throw new ge(r)}}function Ct(e,t="$",r=""){if(e==null||typeof e=="boolean")return e;if(typeof e=="string")return Ji(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)=>Ct(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(Gi(o))throw new ge(i);e[o]!==void 0&&(n[o]=Ct(e[o],i,o))}return n}function on(e){return Ct(e)}var Fi,Mi,ji,Ui,zi,Hi,ge,Nt=l(()=>{Fi=new Set(["privatekey","privkey","secretkey","seedphrase","seed","mnemonic","passphrase","password","keystore","keymaterial","wif","xprv","xpriv","bearer","authorization","signature","apikey","credential"]),Mi=[/\b[5KL][1-9A-HJ-NP-Za-km-z]{50,51}\b/,/\bxprv[0-9A-Za-z]{50,}\b/],ji=new Set([12,15,18,21,24]);Ui=/^\s*(?:0x)?[0-9a-fA-F]{64}\s*$/,zi=/(hash|digest|root|salt|nonce|proof|commitment|sig|id)(?:e?s)?$/i,Hi=new Set(["calldata","data","publickey","pubkey","message","payload","input","extradata"]);ge=class extends Error{constructor(t){super(`action receipt refused: secret-bearing field at ${t}`),this.name="ActionReceiptSecretError",this.code="ACTION_RECEIPT_SECRET"}}});var Xp,Qp,Zp,sn=l(()=>{Xp=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),Qp=Object.freeze(["read","simulate"]),Zp=1440*60});function Rt(e){let t=String(e),r=t.toLowerCase().replace(/[\s._-]+/g,"");return Vi.test(t)||Ki.includes(r)}function Yi(e){return e.replace(/"([A-Za-z0-9_-]+)"\s*:\s*"(?:0x)?([0-9a-fA-F]{64})"/g,(t,r)=>cn.includes(String(r).toLowerCase().replace(/[_-]/g,""))?`"${r}":"<hex64>"`:t)}function un(e){let t;try{t=JSON.stringify(e)}catch(o){throw new q("$",`unserializable-payload: ${String(o?.message||o)}`)}if(t===void 0)return"null";let r=Yi(t);for(let{rule:o,re:i}of an)if(i.test(r))throw new q("$<serialized>",o);if(/(?:^|[^0-9a-fA-Fx])0x[0-9a-fA-F]{64}(?![0-9a-fA-F])/.test(r))throw new q("$<serialized>","raw-32-byte-hex-embedded");return JSON.parse(t,(o,i)=>{if(o&&Rt(o))throw new q(`$<serialized>.${o}`,"forbidden-key-name");return i}),t}function J(e,t="$",r=new Set,n=""){if(e==null)return e;if(typeof e=="string"){let o=cn.includes(String(n).toLowerCase().replace(/[_-]/g,""));for(let{rule:i,re:s}of an)if(!(o&&i.startsWith("raw-32-byte-hex"))&&s.test(e))throw new q(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 q(`${t}[${JSON.stringify(o)}]`,"forbidden-key-name");J(o,`${t}[key]`,r),J(i,`${t}[${String(o)}]`,r)}return e}if(e instanceof Set){let o=0;for(let i of e.values())J(i,`${t}[${o++}]`,r);return e}if(Array.isArray(e))return e.forEach((o,i)=>J(o,`${t}[${i}]`,r)),e;for(let[o,i]of Object.entries(e)){if(Rt(o))throw new q(`${t}.${o}`,"forbidden-key-name");J(i,`${t}.${o}`,r,o)}return e}var q,Vi,Ki,an,cn,ln=l(()=>{sn();q=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}},Vi=/(private[_-]?key|secret|bearer|keystore|mnemonic|seed[_-]?phrase|passphrase|password|api[_-]?key|access[_-]?token|auth[_-]?token|session[_-]?token|signer[_-]?url|signature)/i,Ki=Object.freeze(["privkey","wif","xprv","seed"]);an=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}]),cn=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"])});function Lt(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 $t(e,t="control input"){try{J(e,t),un(e)}catch(r){throw new TypeError(`${t} contains secret or custody material: ${r.message}`)}return e}function ye(e,{required:t=[],optional:r=[]}={},n="object"){Lt(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 Pt(e,t,r=200,{lower:n=!1}={}){if(typeof e!="string"||!e.trim()||e.length>r||Xi.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 be(e,t,r=80){let n=Pt(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 Me(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 R(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){for(let t of Object.values(e))R(t);Object.freeze(e)}return e}var Xi,Bt=l(()=>{Nt();ln();Xi=/[\u0000-\u001f\u007f]/});function dn({family:e,chainId:t},r="chain"){let n=be(e,`${r}.family`,40),o;if(n==="evm"){if(typeof t=="number")o=String(Me(t,`${r}.chainId`,{positive:!0}));else if(o=Pt(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=be(t,`${r}.chainId`,80);return{family:n,chainId:o}}function es(e,t="chain"){return ye(e,{required:["family","chainId"]},t),R(dn(e,t))}function fn(e,t="finality rule"){$t(e,t),Lt(e,t);let r=e.rule;if(!Qi.includes(r))throw new TypeError(`${t}.rule must be confirmations, finalizedTag, or checkpoint`);let n=r==="confirmations"?"confirmations":r;ye(e,{required:["family","chainId","rule",n]},t);let o=dn(e,t);return r==="confirmations"?{...o,rule:r,confirmations:Me(e.confirmations,`${t}.confirmations`,{positive:!0})}:{...o,rule:r,[n]:be(e[n],`${t}.${n}`,80)}}function Dt(e){if(!Array.isArray(e))throw new TypeError("finality policy rules must be an array");let t=e.map((n,o)=>fn(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 R({policyVersion:1,rules:t})}function ts(e){if(ye(e,{required:["policyVersion","rules"]},"finality policy"),e.policyVersion!==1||!Array.isArray(e.rules))throw new TypeError("unsupported finality policy");return Dt(e.rules)}function pn(e,t){let r=es(t,"finality query"),o=ts(e).rules.find(i=>i.family===r.family&&i.chainId===r.chainId);return o?R({status:"KNOWN",...r,rule:o}):R({status:V.UNKNOWN,reason:"MISSING_FINALITY_RULE",...r,rule:null})}function rs(e,t){if(e==null)return null;$t(e,"finality evidence");let r=t.rule==="confirmations"?"confirmations":t.rule;if(ye(e,{required:["status"],optional:[r]},"finality evidence"),!Zi.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"?Me(e.confirmations,"finality evidence.confirmations",{positive:!0}):be(e[r],`finality evidence.${r}`,80)),n}function mn(e,t){if(!e||e.status===V.UNKNOWN||e.rule==null)return R({status:V.UNKNOWN,final:!1,reason:"MISSING_FINALITY_RULE"});let r=fn(e.rule??e,"resolved finality rule"),n=rs(t,r);if(n==null)return R({status:V.UNKNOWN,final:!1,reason:"MISSING_FINALITY_EVIDENCE"});if(n.status!=="LIVE")return R({status:V.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,R({status:o?V.FINAL:V.INCLUDED,final:o,reason:o?"PINNED_RULE_SATISFIED":"PINNED_RULE_NOT_SATISFIED",rule:r})}var Qi,V,Zi,hn=l(()=>{Bt();Qi=Object.freeze(["confirmations","finalizedTag","checkpoint"]),V=Object.freeze({UNKNOWN:"UNKNOWN",INCLUDED:"INCLUDED",FINAL:"FINAL"}),Zi=Object.freeze(["LIVE","STALE","UNKNOWN","UNAVAILABLE"])});function os(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 wn(e){return typeof e=="string"&&["FAIL","FAILED","FAILURE","ORPHAN","ORPHANED","REVERTED"].includes(e.trim().toUpperCase())}function Mt(e){return e==null?e:Array.isArray(e)?e.map(Mt):Ee(e)?Object.fromEntries(Object.keys(e).sort().map(t=>[t,Mt(e[t])])):String(e)}function is(e,t,r,n){let o=A(e.finalityEvidence,n?.finality,e.evidence),i=A(e.finalityPolicy,e.policy);try{return i==null&&Ee(e.finalityRule)&&(i=Dt([{family:t,chainId:r,...e.finalityRule}])),i==null||t==null||r==null?{status:"UNKNOWN",final:!1,reason:"MISSING_FINALITY_RULE"}:mn(pn(i,{family:t,chainId:r}),o)}catch{return{status:"UNKNOWN",final:!1,reason:"MALFORMED_FINALITY_EVIDENCE"}}}function T(e,t,r){r!=null&&(e[t]=r)}function ss(e){return e==null?null:String(e).trim().toLowerCase()}function Ft(...e){let t=e.map(ss).filter(Boolean);return t.length<=1||t.every(r=>r===t[0])}function gn(e={}){if(!Ee(e))throw new TypeError("verified receipt: input object required");let t=on(e),r=A(t.actionReceipt,t.receipt),n=Ee(r)?r:t,o=A(t.observation,t.chainObservation,t.observedReceipt),i=Ee(o),s=A(t.txHash,n.txHash,n.transactionHash,o?.txHash,o?.transactionHash),d=A(t.family,n.family,n.chain?.family,o?.family,o?.chain?.family),a=A(t.chainId,n.chainId,n.chain?.chainId,o?.chainId,o?.chain?.chainId),p=!Ft(t.txHash,n.txHash,n.transactionHash,o?.txHash,o?.transactionHash)||!Ft(t.family,n.family,n.chain?.family,o?.family,o?.chain?.family)||!Ft(t.chainId,n.chainId,n.chain?.chainId,o?.chainId,o?.chain?.chainId),m=is(t,d,a,i&&!p?o:null),c=os(A(o?.receiptStatus,o?.executionStatus,o?.status)),f=A(t.reconciliationStatus,t.reconciliation?.status,o?.reconciliationStatus),u=A(t.finalityState,t.finalityEvidence?.status,t.evidence?.status,o?.finalityState),b="UNKNOWN";wn(f)||!p&&(i&&c==="FAIL"||wn(u))?b="FAIL":!p&&s&&i&&c==="SUCCESS"&&["INCLUDED","FINAL"].includes(m.status)&&(b="SUCCESS");let w={verifiedReceiptVersion:ns,status:b};p&&(w.reason="REFERENCE_MISMATCH"),T(w,"txHash",s),T(w,"chain",A(t.chain,n.chain,o?.chain)),T(w,"family",d),T(w,"chainId",a),T(w,"block",A(o?.block,t.block)),T(w,"blockState",A(o?.blockState,o?.inclusionState)),w.finalityState=m.status,T(w,"confirmations",A(o?.confirmations,o?.finality?.confirmations,t.finalityEvidence?.confirmations,t.evidence?.confirmations)),T(w,"observedAt",A(o?.observedAt,t.observedAt)),T(w,"route",A(t.route,n.route)),T(w,"prepareHash",A(t.prepareHash,n.prepareHash)),T(w,"policyOutcome",A(t.policyOutcome,n.policyOutcome,n.policyChecks));let h=A(t.balanceChanges,o?.balanceChanges,o?.balances,n.balanceChanges,n.balances);return h!=null&&(w.balanceChanges=Mt(h)),T(w,"createdAt",A(t.createdAt,n.createdAt)),T(w,"submittedAt",A(t.submittedAt,n.submittedAt)),T(w,"finalizedAt",A(t.finalizedAt,o?.finalizedAt)),T(w,"timestamps",A(t.timestamps,n.timestamps,o?.timestamps)),R(w)}var ns,ym,A,Ee,yn=l(()=>{Nt();hn();Bt();ns=1,ym=Object.freeze(["SUCCESS","FAIL","UNKNOWN"]),A=(...e)=>e.find(t=>t!=null),Ee=e=>!!e&&typeof e=="object"&&!Array.isArray(e)&&Object.getPrototypeOf(e)===Object.prototype});var En={};xe(En,{observeEvmReceipt:()=>bn,verifyEvmReceipt:()=>us});function cs(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 bn({txHash:e,chainId:t,rpcUrl:r},n={}){let o=String(e||"").trim().toLowerCase();if(!as.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||tn,d=n.rpcCall||_t,a={...n.rpcOptions||{},...r?{rpcUrl:r}:{}},p;try{p=await s({txHash:o,chainId:i},a)}catch(u){return{observation:null,reason:`RPC_UNAVAILABLE: ${u.message}`}}if(!p||p.receipt==null)return{observation:null,reason:p?.reason||"receipt pending"};let m=null,c=p.blockNumber;if(Number.isSafeInteger(c))try{let u=cs(await d(i,"eth_blockNumber",[],a));u!=null&&u>=c&&(m=u-c+1)}catch{}let f={txHash:o,family:"evm",chainId:String(i),receiptStatus:p.status==="success"?"SUCCESS":p.status==="reverted"?"FAIL":"UNKNOWN",block:c==null?void 0:String(c),observedAt:new Date().toISOString(),finality:{status:"LIVE",...m==null?{}:{confirmations:m}}};return m!=null&&(f.confirmations=m),{observation:f,reason:null}}async function us({txHash:e,chainId:t,confirmations:r=1,rpcUrl:n},o={}){let{observation:i,reason:s}=await bn({txHash:e,chainId:t,rpcUrl:n},o),d=gn({txHash:String(e).trim().toLowerCase(),family:"evm",chainId:String(Number(t)),finalityRule:{rule:"confirmations",confirmations:r},...i?{observation:i}:{}});return{receipt:d,observed:!!i,final:d.finalityState==="FINAL",requiredConfirmations:r,reason:s}}var as,xn=l(()=>{rn();yn();as=/^0x[0-9a-f]{64}$/});var Sn={};xe(Sn,{classifyReceipt:()=>se,configDir:()=>ps,firstHourReport:()=>jt,probeReceiptModule:()=>hs,probeReviewModule:()=>ms,venueMap:()=>je});import ls from"node:path";import{homedir as ds}from"node:os";function ps(e=process.env){return e.ORACLE_CONFIG_DIR||ls.join(ds(),".config","oracle")}function je({env:e=process.env,vault:t=null}={}){let r=t||he(),n=[];for(let[o,i]of Object.entries(ke)){let s=(i.rpcEnv||[]).some(a=>String(e[a]||"").trim()),d="prepare";i.evm?s&&(d="live"):d="unavailable",n.push({key:o,chainId:i.chainId,name:i.name,family:"evm",status:d,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 jt({env:e=process.env,model:t=Qr(),vault:r=he(),signerReachable:n=!1,quote:o=null,reviewAvailable:i=!1,receiptAvailable:s=!1}={}){let d=[],a=(u,b,w,h=null)=>d.push({id:u,status:b,detail:w,fix:h}),p=(()=>{let[u,b]=process.versions.node.split(".").map(Number);return u>20||u===20&&b>=19})();a("node",p?"ok":"fail",`node ${process.versions.node}`,p?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 m=e.ORACLE_SIGNER_HOST||"127.0.0.1";if(fs.has(m)?a("signer",n?"ok":"warn",n?`loopback ${m}:${e.ORACLE_SIGNER_PORT||9462}`:"loopback signer not reachable",n?null:"oracle signer"):a("signer","fail",`signer host ${m} is not loopback`,"unset ORACLE_SIGNER_HOST"),!o)a("quote","warn","quote not probed",null);else if(o.ok){let u=String(o.detail||"net quote returned");a("quote","ok",u.length>140?`${u.slice(0,140)}\u2026`:u)}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 c=d.some(u=>u.status==="fail"),f=d.filter(u=>u.status==="ok").length;return{ok:!c,checks:d,firstRunScore:{ok:f,total:d.length,label:`${f}/${d.length} first-run hops green`},venues:je({env:e,vault:r})}}async function ms(){try{return typeof(await Promise.resolve().then(()=>(At(),Pr))).createSignTimeReview=="function"}catch{return!1}}async function hs(){try{let e=await Promise.resolve().then(()=>(xn(),En));return typeof e.observeReceipt=="function"||typeof e.default=="function"||Object.values(e).some(t=>typeof t=="function")}catch{return!1}}var fs,qt=l(()=>{Ve();It();Zr();Ke();fs=new Set(["127.0.0.1","::1","localhost"])});var An={};xe(An,{classifyReceipt:()=>se,default:()=>ys,firstHourReport:()=>jt,probeQuote:()=>gs,probeSigner:()=>ws,vaultStatus:()=>he});async function ws(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}}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:`${r.chainId} ${r.baseToken?.symbol}/${r.quoteToken?.symbol} $${r.priceUsd}`}}catch(e){return{ok:!1,detail:e instanceof Error?e.message:"quote failed"}}}var ys,vn=l(()=>{qt();It();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=je();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}}});import ie from"node:fs";import An from"node:path";import qt from"node:fs";import Z from"node:path";xe();var $n="0.19.0",Os=`hermes-agent==${$n}`;var jt="0.12.1",_s=Object.freeze({posix:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${jt}/uv-installer.sh`,sha256:"d3f5412d38c99f9d024901843bf98206f0d2c6dbe64df40d0b740e2751ca62c1"}),windows:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${jt}/uv-installer.ps1`,sha256:"b9ec035151bfbb11d616dbd69886498d885551489eddf095ea3c0ad59f640eb0"})});function Pn(){return Z.join(Q(),"runtime")}function Bn(){return Z.join(Pn(),"venv")}function Fn(e){let t=process.platform==="win32"?"Scripts":"bin",r=process.platform==="win32"?`${e}.exe`:e;return Z.join(Bn(),t,r)}function Dn(){return Fn("hermes")}function Mn(e){let t=process.platform==="win32"&&!Z.extname(e)?["",".exe",".cmd",".bat"]:[""];for(let r of(process.env.PATH||"").split(Z.delimiter))if(r)for(let n of t){let o=Z.join(r,`${e}${n}`);try{if(qt.existsSync(o))return o}catch{}}return null}function Ut(){if(process.env.ORACLE_HERMES_BIN)return{ok:!0,bin:process.env.ORACLE_HERMES_BIN,source:"env"};let e=Dn();if(qt.existsSync(e))return{ok:!0,bin:e,source:"managed"};let t=Mn("hermes");return t?{ok:!0,bin:t,source:"path"}:{ok:!1,bin:null,source:null}}import U from"node:fs";import k from"node:path";xe();import{existsSync as Ht,readFileSync as jn}from"node:fs";import{dirname as zt,join as je}from"node:path";import{fileURLToPath as qn}from"node:url";function Un(e){let t=zt(qn(e));for(let r=0;r<8;r+=1){let n=je(t,"package.json");if(Ht(n))try{let i=JSON.parse(jn(n,"utf8"));if(i&&typeof i.version=="string")return t}catch{}let o=zt(t);if(o===t)break;t=o}throw new Error(`oracle: could not resolve package root from ${e}`)}function Wt(e,t){let r=Un(t),n=je(r,e);return Ht(n)?n:je(r,"dist","assets",e)}var zn=Object.freeze([{id:"oracle",label:"Oracle Native",kind:"oracle",bins:["oracle"],website:!0,detect:!0},{id:"hermes",label:"Hermes Agent",kind:"mcp",bins:["hermes"],mcpTarget:"generic",configKey:"hermes",website:!0,detect:!0},{id:"claude",label:"Claude Code",kind:"mcp",bins:["claude"],mcpTarget:"claude-code",configKey:"claudeCode",website:!0,detect:!0},{id:"claude-desktop",label:"Claude Desktop",kind:"mcp",bins:[],mcpTarget:"claude-desktop",configKey:"claudeDesktop",website:!0,detect:!1},{id:"chatgpt",label:"ChatGPT",kind:"mcp",bins:[],mcpTarget:"chatgpt",configKey:"chatgpt",website:!0,detect:!1},{id:"codex",label:"OpenAI Codex",kind:"mcp",bins:["codex"],mcpTarget:"codex",configKey:"codex",website:!0,detect:!0},{id:"cursor",label:"Cursor",kind:"mcp",bins:["cursor","cursor-agent"],mcpTarget:"cursor",configKey:"cursor",website:!0,detect:!0},{id:"windsurf",label:"Windsurf",kind:"mcp",bins:["windsurf"],mcpTarget:"vscode",configKey:"windsurf",website:!0,detect:!0},{id:"vscode",label:"VS Code / Copilot",kind:"mcp",bins:["code","code-insiders"],mcpTarget:"vscode",configKey:"vscode",website:!0,detect:!0},{id:"openclaw",label:"OpenClaw",kind:"mcp",bins:["openclaw","claw"],mcpTarget:"generic",configKey:"openclaw",website:!0,detect:!0},{id:"perplexity",label:"Perplexity",kind:"mcp",bins:["perplexity","pplx"],mcpTarget:"generic",configKey:"perplexity",website:!0,detect:!0},{id:"manus",label:"Manus",kind:"mcp",bins:["manus"],mcpTarget:"generic",configKey:"manus",website:!0,detect:!0},{id:"prime",label:"Prime Intellect Agent",kind:"mcp",bins:["prime-agent","prime"],mcpTarget:"generic",configKey:"prime",website:!1,detect:!0},{id:"opencode",label:"OpenCode",kind:"mcp",bins:["opencode"],mcpTarget:"generic",configKey:"opencode",website:!1,detect:!0},{id:"aider",label:"Aider",kind:"mcp",bins:["aider"],mcpTarget:"generic",configKey:"aider",website:!1,detect:!0},{id:"continue",label:"Continue",kind:"mcp",bins:["continue"],mcpTarget:"vscode",configKey:"continue",website:!1,detect:!0},{id:"goose",label:"Goose",kind:"mcp",bins:["goose"],mcpTarget:"generic",configKey:"goose",website:!1,detect:!0},{id:"amp",label:"Amp",kind:"mcp",bins:["amp"],mcpTarget:"generic",configKey:"amp",website:!1,detect:!0},{id:"generic",label:"Generic MCP",kind:"mcp",bins:[],mcpTarget:"generic",configKey:"genericMcp",website:!0,detect:!1}]);function Gt(){return zn.filter(e=>e.website)}var qe=Object.freeze(["long_horizon","recursive_fanout","continual_learn","evidence_first","prepare_only"]);function Ue(e=process.env){let t=String(e?.ORACLE_RESEARCH_MODE??e?.ORACLE_RLM_MODE??"").trim().toLowerCase();return t==="1"||t==="true"||t==="yes"||t==="on"||t==="research"}var ee=Object.freeze(["oracle_cli","memory_add","memory_remove","memory_search","skill_load","skill_create","skill_list","cron_add","cron_list","cron_remove","meta_analyze","web_fetch","web_search","file_read","file_write","mcp_list","mcp_call","todo_list","todo_set","session_search","research_delegate","rlm","deep_research","clarify","code_eval","learn_skill","workspace_artifact","research_artifact","portfolio_analyze","trade_lifecycle","signal_score","vault_status","signer_status","signer_execute","signer_disarm","receipt_report","watch_create","watch_list","portfolio_snapshot","vision_analyze","browser_exec","xurl","knowledge_search"]),Hn="deny",Fs=256*1024;var Ds=Object.freeze({version:1,source:"default",defaultDecision:Hn,allow:ee,deny:Object.freeze([])});var Wn=Object.freeze(["oracle_cli","memory_search","skill_load","skill_list","web_fetch","web_search","todo_list","todo_set","session_search","research_delegate","rlm","deep_research","clarify","code_eval","research_artifact","portfolio_analyze","trade_lifecycle","signal_score","vault_status","signer_status","receipt_report","watch_list","portfolio_snapshot","vision_analyze","knowledge_search"]),Ms=new Set(Wn);var ze=Object.freeze(["wallet","pool","nft_floor","hl_flow","prediction_market"]),qs=Object.freeze({wallets:"wallet",smart_wallet:"wallet",pools:"pool",new_pool:"pool",nft:"nft_floor",nft_floors:"nft_floor",hyperliquid:"hl_flow",prediction:"prediction_market",prediction_markets:"prediction_market"}),D=(e,t=0,r=1)=>Math.min(r,Math.max(t,e)),$=e=>Number.isFinite(Number(e))?Number(e):null,Gn=e=>Math.round(e*1e4)/1e4;function P(e,t,r,n=!0){!n||r===null||!Number.isFinite(r)||e.push({feature:t,value:Gn(r)})}function Jn(e,t){let r=$(e.repeatBuys??e.repeat_buys??e.buyCount),n=$(e.walletWinRate??e.winRate);P(t,"repeat_buys",r===null?null:D((r-1)/4)*.38),P(t,"wallet_win_rate",n===null?null:(D(n)-.5)*.5)}function Vn(e,t){let r=$(e.ageHours??e.poolAgeHours),n=$(e.liquidityUsd??e.liquidity),o=e.liquidityLocked??e.locked;P(t,"pool_age",r===null?null:r<24?-.42:D(r/720)*.12),P(t,"liquidity",n===null?null:(D(Math.log10(Math.max(1,n))/7)-.5)*.28),P(t,"liquidity_lock",o==null?null:o?.12:-.28)}function Kn(e,t){let r=$(e.floorChange??e.floorChangePct),n=$(e.sales??e.saleCount);P(t,"floor_change",r===null?null:D(r,-1,1)*.35),P(t,"sales_depth",n===null?null:D(n/50)*.18)}function Yn(e,t){let r=$(e.flowImbalance??e.imbalance),n=$(e.fundingRate??e.funding);P(t,"flow_imbalance",r===null?null:D(r,-1,1)*.42),P(t,"funding",n===null?null:-D(n*100,-1,1)*.12)}function Xn(e,t){let r=$(e.marketProbability??e.marketPrice??e.probability),n=$(e.fairProbability??e.referenceProbability??e.fairValue);P(t,"probability_mispricing",r===null||n===null?null:D(n-r,-1,1)*.65);let o=$(e.liquidityUsd??e.liquidity);P(t,"market_liquidity",o===null?null:D(Math.log10(Math.max(1,o))/6)*.12)}var Us=Object.freeze({wallet:Jn,pool:Vn,nft_floor:Kn,hl_flow:Yn,prediction_market:Xn});function He(e){try{return U.existsSync(e)}catch{return!1}}function Se(e){for(let t of e)if(t&&He(t))return t;return null}function We(e){try{return Wt(e,import.meta.url)}catch{return null}}function Qn(){let e=[k.join(S,"dist/data/desk-data.mjs"),k.join(S,"data/desk-data.mjs"),k.join(S,"src/data/desk-data.mjs")];for(let n of e)if(He(n))try{let i=U.readFileSync(n,"utf8").match(/\bid\s*:\s*["'][a-z0-9-]+["']/gi)||[],s=new Set(i.map(d=>d.toLowerCase()));if(s.size>=20)return{count:s.size,detail:`${s.size} provider ids (bundled desk-data)`}}catch{}let t=[k.join(S,"src/data/providers"),k.join(S,"dist/data/providers"),k.join(S,"data/providers")],r=Se(t);if(!r)return{count:0,detail:"providers dir missing"};try{let n=U.readdirSync(r).filter(o=>o.endsWith(".mjs"));return{count:n.length,detail:`${n.length} provider modules`}}catch(n){return{count:0,detail:n instanceof Error?n.message:String(n)}}}function Jt(){let e=Se([We("skills"),k.join(S,"skills"),k.join(S,"dist/assets/skills"),k.join(S,"assets/skills")]);if(!e)return{count:0,trading:[],building:[]};let t=U.readdirSync(e),r=t.filter(o=>/trade|swap|snipe|farm|hyperliquid|poly|best-exec|circuit|meme|token-research|rfq/i.test(o)),n=t.filter(o=>/launch|builder|protocol|nft|dex-launch|token-launch|security|contract/i.test(o));return{count:t.length,trading:r,building:n}}function Zn(){let e=Se([We("protocols/templates"),k.join(S,"protocols/templates"),k.join(S,"dist/assets/protocols/templates"),k.join(S,"assets/protocols/templates")]);return e?U.readdirSync(e).filter(r=>!r.startsWith(".")):Jt().building.some(r=>/protocol-builder|dex-launch|token-launch/i.test(r))?["(via skills: protocol-builder / launch packs)"]:[]}function eo(){let e=Se([We("profiles"),k.join(S,"profiles"),k.join(S,"dist/assets/profiles"),k.join(S,"assets/profiles")]);return e?U.readdirSync(e,{withFileTypes:!0}).filter(t=>t.isDirectory()&&!t.name.startsWith("_")).map(t=>t.name):[]}function to(){try{if(ee.includes("trade_lifecycle")&&!ee.some(t=>/broadcast|wallet_sign/.test(t)))return!0}catch{}let e=[k.join(S,"src/capability-posture.mjs"),k.join(S,"dist/capability-posture.mjs"),k.join(S,"capability-posture.mjs"),k.join(S,"dist/public-control/policy-schema.mjs"),k.join(S,"README.md"),k.join(S,"package.json")];for(let t of e)if(He(t))try{let r=U.readFileSync(t,"utf8");if(/prepare-only|never takes your key|never.*broadcast/i.test(r))return!0}catch{}return!1}function Vt(e=process.env){let t=[],r=(g,y,x,v=1)=>{t.push({id:g,status:y,detail:x,weight:v})},[n,o]=process.versions.node.split(".").map(Number),i=n>20||n===20&&o>=19;r("node",i?"ok":"fail",`node ${process.versions.node}`,2);let d=["oracle_cli","research_delegate","trade_lifecycle","signal_score","skill_load","learn_skill","code_eval","cron_add","web_fetch"].filter(g=>!ee.includes(g));r("agent_tools",d.length===0?"ok":"warn",d.length===0?`safe tools ${ee.length}; signal_score present`:`missing tools: ${d.join(",")}`,3),r("research_attributes","ok",`attrs [${qe.join(", ")}]; mode=${Ue(e)?"ON":"off"}`,2);let a=Qn();r("providers",a.count>=40?"ok":a.count>=10?"warn":"fail",a.detail,3);let p=Jt();r("skills_trading_build",p.trading.length>=5&&p.building.length>=4?"ok":p.count>=10?"warn":"fail",`${p.count} skills; trading=${p.trading.length} building=${p.building.length}`,3);let m=Zn();r("protocol_templates",m.length>=2?"ok":"warn",m.length?m.join(", "):"none",2);let c=eo();r("profiles",c.includes("protocol-builder")&&c.includes("oracle")?"ok":c.length>=1?"warn":"fail",c.join(", ")||"none",2),r("signals_engine",ze.length>=4?"ok":"fail",`types: ${ze.join(", ")} (cold / no hot exec)`,2);let f=Gt();r("harness_roster",f.length>=8?"ok":"warn",`${f.length} supported harnesses; Oracle native default; MCP inbound only`,2),r("custody_prepare_only",to()?"ok":"fail","public plane prepare-only",4);let u=e.ORACLE_DATA_URL||"http://127.0.0.1:8787";r("data_url","ok",u,1);let b=0,w=0;for(let g of t)w+=g.weight,g.status==="ok"?b+=g.weight:g.status==="warn"&&(b+=g.weight*.5);let h=w?Math.round(b/w*100):0,I=!t.some(g=>g.status==="fail")&&h>=70,O=I?`AGENTIC READY ${h}% \u2014 Oracle is the crypto control plane (prepare-only); pair coding harnesses via MCP for build.`:`AGENTIC GAPS ${h}% \u2014 fix fail/warn checks before calling Oracle the default crypto harness.`;return{ok:I,score:b,max:w,pct:h,summary:O,researchMode:Ue(e),attributes:[...qe],packageRoot:S,checks:t}}function vn(){let[e,t]=process.versions.node.split(".").map(Number);return e>20||e===20&&t>=19}function gs(e){if(!ie.existsSync(e))return{};let t={};for(let r of ie.readFileSync(e,"utf8").split(/\r?\n/)){let n=r.match(/^([A-Z0-9_]+)=(.*)$/);n&&(t[n[1]]=n[2])}return t}async function ys(e){let t=e.replace(/\/$/,"");return(await Promise.all(["/health","/public/health"].map(async n=>{try{return(await fetch(t+n)).ok}catch{return!1}}))).some(Boolean)}var _m={name:"doctor",summary:"check the read plane (+ optional --agentic readiness score)",group:"read",usage:"oracle doctor [--json] [--agentic] [--first-hour]",async run(e){let t=e.argv.includes("--json"),r=e.argv.includes("--agentic"),n=e.argv.includes("--first-hour"),o=[],i=!1,s=(g,y,x,v=null)=>{o.push({id:g,status:y,detail:x,fix:v}),y==="fail"&&(i=!0)};s("node",vn()?"ok":"fail",`node ${process.versions.node}`,vn()?null:"install node >= 20.19");let d=e.paths.oracleExecEnvPath(),a=gs(d),p=process.env.ORACLE_ROUTE_ATTESTATION_SECRET||process.env.MAD_ROUTE_ATTESTATION_SECRET||process.env.ORACLE_ATTESTATION_SECRET||process.env.ORACLE_STAMP_HMAC_SECRET||a.ORACLE_ROUTE_ATTESTATION_SECRET||a.MAD_ROUTE_ATTESTATION_SECRET||a.ORACLE_ATTESTATION_SECRET||a.ORACLE_STAMP_HMAC_SECRET;s("attestation_secret",p?"ok":"warn",p?"present":"missing",p?null:"run oracle init --apply (writes ~/.config/oracle/exec.env)");let m=process.env.ORACLE_DATA_URL||"http://127.0.0.1:8787",c=await ys(m),f=e.paths.loadDeskRouting&&(process.env.ORACLE_DESK_URL||process.env.ORACLE_PUBLIC_URL)?`desk ${process.env.ORACLE_DESK_URL||process.env.ORACLE_PUBLIC_URL}`:null;s("data_server",c?"ok":"warn",c?`reachable ${m}${f?` (${f})`:""}`:`down ${m}`,c?null:m.includes("127.0.0.1")||m.includes("localhost")?"oracle data serve OR set ~/.config/oracle/desk.json to YOUR_DESK_HOST":"check the desk URL in ~/.config/oracle/desk.json (/public/health)");let u=Ut();s("harness_model","ok","Oracle native harness is default; external harnesses are inbound MCP only (oracle harness detect)",null),s("hermes_opt_in","ok",u.ok?`detected ${u.bin} (${u.source}) \u2014 unused unless explicitly opted in`:"not detected \u2014 native-only OK",null);let b=An.join(e.paths.hermesRoot(),"profiles"),w=0;ie.existsSync(b)&&(w=ie.readdirSync(b,{withFileTypes:!0}).filter(g=>g.isDirectory()).length),s("hermes_lanes","ok",w>0?`${w} profile dir(s) (optional surface)`:"no Hermes lane profiles (native-only OK)",null);{let g=An.join(b,"oracle",".env"),y=[];if(ie.existsSync(g)){let x=ie.readFileSync(g,"utf8");/^TELEGRAM_BOT_TOKEN=.+/m.test(x)&&y.push("telegram"),/^DISCORD_BOT_TOKEN=.+/m.test(x)&&y.push("discord"),/^SLACK_BOT_TOKEN=.+/m.test(x)&&y.push("slack")}y.length?u.ok?s("messaging","ok",`${y.join("/")} configured \xB7 runtime ${u.source}`,null):s("messaging","warn",`${y.join("/")} token set but messaging runtime missing \u2014 bot cannot answer`,"oracle bootstrap, then oracle setup gateway restart"):s("messaging","ok","no channel tokens configured (optional \u2014 oracle setup)",null)}let h=null;if(r){h=Vt(process.env);for(let g of h.checks)s(`agentic_${g.id}`,g.status,g.detail,null)}let I=null;if(n){let{firstHourReport:g,probeReviewModule:y,probeReceiptModule:x}=await Promise.resolve().then(()=>(Mt(),En)),{probeSigner:v,probeQuote:E}=await Promise.resolve().then(()=>(Sn(),xn)),[_,K,C,B]=await Promise.all([v(process.env),E(),y(),x()]);I=g({signerReachable:_,quote:K,reviewAvailable:C,receiptAvailable:B});for(let F of I.checks)s(`hour_${F.id}`,F.status,F.detail,F.fix);s("hour_score",I.ok?"ok":"warn",I.firstRunScore.label,null)}let O={ok:!i&&(h?h.ok:!0)&&(I?I.ok:!0),checks:o,...I?{firstHour:I}:{},...h?{agentic:{pct:h.pct,summary:h.summary,attributes:h.attributes,researchMode:h.researchMode}}:{}};if(t)process.stdout.write(JSON.stringify(O,null,2)+`
|
|
6
|
+
`);return 0}}});import ie from"node:fs";import kn from"node:path";import zt from"node:fs";import Z from"node:path";Ae();var Bn="0.19.0",Cs=`hermes-agent==${Bn}`;var Ut="0.12.1",Ns=Object.freeze({posix:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${Ut}/uv-installer.sh`,sha256:"d3f5412d38c99f9d024901843bf98206f0d2c6dbe64df40d0b740e2751ca62c1"}),windows:Object.freeze({url:`https://github.com/astral-sh/uv/releases/download/${Ut}/uv-installer.ps1`,sha256:"b9ec035151bfbb11d616dbd69886498d885551489eddf095ea3c0ad59f640eb0"})});function Dn(){return Z.join(Q(),"runtime")}function Fn(){return Z.join(Dn(),"venv")}function Mn(e){let t=process.platform==="win32"?"Scripts":"bin",r=process.platform==="win32"?`${e}.exe`:e;return Z.join(Fn(),t,r)}function jn(){return Mn("hermes")}function qn(e){let t=process.platform==="win32"&&!Z.extname(e)?["",".exe",".cmd",".bat"]:[""];for(let r of(process.env.PATH||"").split(Z.delimiter))if(r)for(let n of t){let o=Z.join(r,`${e}${n}`);try{if(zt.existsSync(o))return o}catch{}}return null}function Ht(){if(process.env.ORACLE_HERMES_BIN)return{ok:!0,bin:process.env.ORACLE_HERMES_BIN,source:"env"};let e=jn();if(zt.existsSync(e))return{ok:!0,bin:e,source:"managed"};let t=qn("hermes");return t?{ok:!0,bin:t,source:"path"}:{ok:!1,bin:null,source:null}}import U from"node:fs";import k from"node:path";Ae();import{existsSync as Gt,readFileSync as Un}from"node:fs";import{dirname as Wt,join as Ue}from"node:path";import{fileURLToPath as zn}from"node:url";function Hn(e){let t=Wt(zn(e));for(let r=0;r<8;r+=1){let n=Ue(t,"package.json");if(Gt(n))try{let i=JSON.parse(Un(n,"utf8"));if(i&&typeof i.version=="string")return t}catch{}let o=Wt(t);if(o===t)break;t=o}throw new Error(`oracle: could not resolve package root from ${e}`)}function Jt(e,t){let r=Hn(t),n=Ue(r,e);return Gt(n)?n:Ue(r,"dist","assets",e)}var Wn=Object.freeze([{id:"oracle",label:"Oracle Native",kind:"oracle",bins:["oracle"],website:!0,detect:!0},{id:"hermes",label:"Hermes Agent",kind:"mcp",bins:["hermes"],mcpTarget:"generic",configKey:"hermes",website:!0,detect:!0},{id:"claude",label:"Claude Code",kind:"mcp",bins:["claude"],mcpTarget:"claude-code",configKey:"claudeCode",website:!0,detect:!0},{id:"claude-desktop",label:"Claude Desktop",kind:"mcp",bins:[],mcpTarget:"claude-desktop",configKey:"claudeDesktop",website:!0,detect:!1},{id:"chatgpt",label:"ChatGPT",kind:"mcp",bins:[],mcpTarget:"chatgpt",configKey:"chatgpt",website:!0,detect:!1},{id:"codex",label:"OpenAI Codex",kind:"mcp",bins:["codex"],mcpTarget:"codex",configKey:"codex",website:!0,detect:!0},{id:"cursor",label:"Cursor",kind:"mcp",bins:["cursor","cursor-agent"],mcpTarget:"cursor",configKey:"cursor",website:!0,detect:!0},{id:"windsurf",label:"Windsurf",kind:"mcp",bins:["windsurf"],mcpTarget:"vscode",configKey:"windsurf",website:!0,detect:!0},{id:"vscode",label:"VS Code / Copilot",kind:"mcp",bins:["code","code-insiders"],mcpTarget:"vscode",configKey:"vscode",website:!0,detect:!0},{id:"openclaw",label:"OpenClaw",kind:"mcp",bins:["openclaw","claw"],mcpTarget:"generic",configKey:"openclaw",website:!0,detect:!0},{id:"perplexity",label:"Perplexity",kind:"mcp",bins:["perplexity","pplx"],mcpTarget:"generic",configKey:"perplexity",website:!0,detect:!0},{id:"manus",label:"Manus",kind:"mcp",bins:["manus"],mcpTarget:"generic",configKey:"manus",website:!0,detect:!0},{id:"prime",label:"Prime Intellect Agent",kind:"mcp",bins:["prime-agent","prime"],mcpTarget:"generic",configKey:"prime",website:!1,detect:!0},{id:"opencode",label:"OpenCode",kind:"mcp",bins:["opencode"],mcpTarget:"generic",configKey:"opencode",website:!1,detect:!0},{id:"aider",label:"Aider",kind:"mcp",bins:["aider"],mcpTarget:"generic",configKey:"aider",website:!1,detect:!0},{id:"continue",label:"Continue",kind:"mcp",bins:["continue"],mcpTarget:"vscode",configKey:"continue",website:!1,detect:!0},{id:"goose",label:"Goose",kind:"mcp",bins:["goose"],mcpTarget:"generic",configKey:"goose",website:!1,detect:!0},{id:"amp",label:"Amp",kind:"mcp",bins:["amp"],mcpTarget:"generic",configKey:"amp",website:!1,detect:!0},{id:"generic",label:"Generic MCP",kind:"mcp",bins:[],mcpTarget:"generic",configKey:"genericMcp",website:!0,detect:!1}]);function Vt(){return Wn.filter(e=>e.website)}var ze=Object.freeze(["long_horizon","recursive_fanout","continual_learn","evidence_first","prepare_only"]);function He(e=process.env){let t=String(e?.ORACLE_RESEARCH_MODE??e?.ORACLE_RLM_MODE??"").trim().toLowerCase();return t==="1"||t==="true"||t==="yes"||t==="on"||t==="research"}var ee=Object.freeze(["oracle_cli","memory_add","memory_remove","memory_search","skill_load","skill_create","skill_list","cron_add","cron_list","cron_remove","meta_analyze","web_fetch","web_search","file_read","file_write","mcp_list","mcp_call","todo_list","todo_set","session_search","research_delegate","rlm","deep_research","clarify","code_eval","learn_skill","workspace_artifact","research_artifact","portfolio_analyze","trade_lifecycle","signal_score","vault_status","signer_status","signer_execute","signer_disarm","receipt_report","watch_create","watch_list","portfolio_snapshot","vision_analyze","browser_exec","xurl","knowledge_search"]),Gn="deny",Ms=256*1024;var js=Object.freeze({version:1,source:"default",defaultDecision:Gn,allow:ee,deny:Object.freeze([])});var Jn=Object.freeze(["oracle_cli","memory_search","skill_load","skill_list","web_fetch","web_search","todo_list","todo_set","session_search","research_delegate","rlm","deep_research","clarify","code_eval","research_artifact","portfolio_analyze","trade_lifecycle","signal_score","vault_status","signer_status","receipt_report","watch_list","portfolio_snapshot","vision_analyze","knowledge_search"]),qs=new Set(Jn);var We=Object.freeze(["wallet","pool","nft_floor","hl_flow","prediction_market"]),zs=Object.freeze({wallets:"wallet",smart_wallet:"wallet",pools:"pool",new_pool:"pool",nft:"nft_floor",nft_floors:"nft_floor",hyperliquid:"hl_flow",prediction:"prediction_market",prediction_markets:"prediction_market"}),F=(e,t=0,r=1)=>Math.min(r,Math.max(t,e)),$=e=>Number.isFinite(Number(e))?Number(e):null,Vn=e=>Math.round(e*1e4)/1e4;function P(e,t,r,n=!0){!n||r===null||!Number.isFinite(r)||e.push({feature:t,value:Vn(r)})}function Kn(e,t){let r=$(e.repeatBuys??e.repeat_buys??e.buyCount),n=$(e.walletWinRate??e.winRate);P(t,"repeat_buys",r===null?null:F((r-1)/4)*.38),P(t,"wallet_win_rate",n===null?null:(F(n)-.5)*.5)}function Yn(e,t){let r=$(e.ageHours??e.poolAgeHours),n=$(e.liquidityUsd??e.liquidity),o=e.liquidityLocked??e.locked;P(t,"pool_age",r===null?null:r<24?-.42:F(r/720)*.12),P(t,"liquidity",n===null?null:(F(Math.log10(Math.max(1,n))/7)-.5)*.28),P(t,"liquidity_lock",o==null?null:o?.12:-.28)}function Xn(e,t){let r=$(e.floorChange??e.floorChangePct),n=$(e.sales??e.saleCount);P(t,"floor_change",r===null?null:F(r,-1,1)*.35),P(t,"sales_depth",n===null?null:F(n/50)*.18)}function Qn(e,t){let r=$(e.flowImbalance??e.imbalance),n=$(e.fundingRate??e.funding);P(t,"flow_imbalance",r===null?null:F(r,-1,1)*.42),P(t,"funding",n===null?null:-F(n*100,-1,1)*.12)}function Zn(e,t){let r=$(e.marketProbability??e.marketPrice??e.probability),n=$(e.fairProbability??e.referenceProbability??e.fairValue);P(t,"probability_mispricing",r===null||n===null?null:F(n-r,-1,1)*.65);let o=$(e.liquidityUsd??e.liquidity);P(t,"market_liquidity",o===null?null:F(Math.log10(Math.max(1,o))/6)*.12)}var Hs=Object.freeze({wallet:Kn,pool:Yn,nft_floor:Xn,hl_flow:Qn,prediction_market:Zn});function Ge(e){try{return U.existsSync(e)}catch{return!1}}function ve(e){for(let t of e)if(t&&Ge(t))return t;return null}function Je(e){try{return Jt(e,import.meta.url)}catch{return null}}function eo(){let e=[k.join(S,"dist/data/desk-data.mjs"),k.join(S,"data/desk-data.mjs"),k.join(S,"src/data/desk-data.mjs")];for(let n of e)if(Ge(n))try{let i=U.readFileSync(n,"utf8").match(/\bid\s*:\s*["'][a-z0-9-]+["']/gi)||[],s=new Set(i.map(d=>d.toLowerCase()));if(s.size>=20)return{count:s.size,detail:`${s.size} provider ids (bundled desk-data)`}}catch{}let t=[k.join(S,"src/data/providers"),k.join(S,"dist/data/providers"),k.join(S,"data/providers")],r=ve(t);if(!r)return{count:0,detail:"providers dir missing"};try{let n=U.readdirSync(r).filter(o=>o.endsWith(".mjs"));return{count:n.length,detail:`${n.length} provider modules`}}catch(n){return{count:0,detail:n instanceof Error?n.message:String(n)}}}function Kt(){let e=ve([Je("skills"),k.join(S,"skills"),k.join(S,"dist/assets/skills"),k.join(S,"assets/skills")]);if(!e)return{count:0,trading:[],building:[]};let t=U.readdirSync(e),r=t.filter(o=>/trade|swap|snipe|farm|hyperliquid|poly|best-exec|circuit|meme|token-research|rfq/i.test(o)),n=t.filter(o=>/launch|builder|protocol|nft|dex-launch|token-launch|security|contract/i.test(o));return{count:t.length,trading:r,building:n}}function to(){let e=ve([Je("protocols/templates"),k.join(S,"protocols/templates"),k.join(S,"dist/assets/protocols/templates"),k.join(S,"assets/protocols/templates")]);return e?U.readdirSync(e).filter(r=>!r.startsWith(".")):Kt().building.some(r=>/protocol-builder|dex-launch|token-launch/i.test(r))?["(via skills: protocol-builder / launch packs)"]:[]}function ro(){let e=ve([Je("profiles"),k.join(S,"profiles"),k.join(S,"dist/assets/profiles"),k.join(S,"assets/profiles")]);return e?U.readdirSync(e,{withFileTypes:!0}).filter(t=>t.isDirectory()&&!t.name.startsWith("_")).map(t=>t.name):[]}function no(){try{if(ee.includes("trade_lifecycle")&&!ee.some(t=>/broadcast|wallet_sign/.test(t)))return!0}catch{}let e=[k.join(S,"src/capability-posture.mjs"),k.join(S,"dist/capability-posture.mjs"),k.join(S,"capability-posture.mjs"),k.join(S,"dist/public-control/policy-schema.mjs"),k.join(S,"README.md"),k.join(S,"package.json")];for(let t of e)if(Ge(t))try{let r=U.readFileSync(t,"utf8");if(/prepare-only|never takes your key|never.*broadcast/i.test(r))return!0}catch{}return!1}function Yt(e=process.env){let t=[],r=(g,y,x,v=1)=>{t.push({id:g,status:y,detail:x,weight:v})},[n,o]=process.versions.node.split(".").map(Number),i=n>20||n===20&&o>=19;r("node",i?"ok":"fail",`node ${process.versions.node}`,2);let d=["oracle_cli","research_delegate","trade_lifecycle","signal_score","skill_load","learn_skill","code_eval","cron_add","web_fetch"].filter(g=>!ee.includes(g));r("agent_tools",d.length===0?"ok":"warn",d.length===0?`safe tools ${ee.length}; signal_score present`:`missing tools: ${d.join(",")}`,3),r("research_attributes","ok",`attrs [${ze.join(", ")}]; mode=${He(e)?"ON":"off"}`,2);let a=eo();r("providers",a.count>=40?"ok":a.count>=10?"warn":"fail",a.detail,3);let p=Kt();r("skills_trading_build",p.trading.length>=5&&p.building.length>=4?"ok":p.count>=10?"warn":"fail",`${p.count} skills; trading=${p.trading.length} building=${p.building.length}`,3);let m=to();r("protocol_templates",m.length>=2?"ok":"warn",m.length?m.join(", "):"none",2);let c=ro();r("profiles",c.includes("protocol-builder")&&c.includes("oracle")?"ok":c.length>=1?"warn":"fail",c.join(", ")||"none",2),r("signals_engine",We.length>=4?"ok":"fail",`types: ${We.join(", ")} (cold / no hot exec)`,2);let f=Vt();r("harness_roster",f.length>=8?"ok":"warn",`${f.length} supported harnesses; Oracle native default; MCP inbound only`,2),r("custody_prepare_only",no()?"ok":"fail","public plane prepare-only",4);let u=e.ORACLE_DATA_URL||"http://127.0.0.1:8787";r("data_url","ok",u,1);let b=0,w=0;for(let g of t)w+=g.weight,g.status==="ok"?b+=g.weight:g.status==="warn"&&(b+=g.weight*.5);let h=w?Math.round(b/w*100):0,I=!t.some(g=>g.status==="fail")&&h>=70,O=I?`AGENTIC READY ${h}% \u2014 Oracle is the crypto control plane (prepare-only); pair coding harnesses via MCP for build.`:`AGENTIC GAPS ${h}% \u2014 fix fail/warn checks before calling Oracle the default crypto harness.`;return{ok:I,score:b,max:w,pct:h,summary:O,researchMode:He(e),attributes:[...ze],packageRoot:S,checks:t}}function In(){let[e,t]=process.versions.node.split(".").map(Number);return e>20||e===20&&t>=19}function bs(e){if(!ie.existsSync(e))return{};let t={};for(let r of ie.readFileSync(e,"utf8").split(/\r?\n/)){let n=r.match(/^([A-Z0-9_]+)=(.*)$/);n&&(t[n[1]]=n[2])}return t}async function Es(e){let t=e.replace(/\/$/,"");return(await Promise.all(["/health","/public/health"].map(async n=>{try{return(await fetch(t+n)).ok}catch{return!1}}))).some(Boolean)}var $m={name:"doctor",summary:"check the read plane (+ optional --agentic readiness score)",group:"read",usage:"oracle doctor [--json] [--agentic] [--first-hour]",async run(e){let t=e.argv.includes("--json"),r=e.argv.includes("--agentic"),n=e.argv.includes("--first-hour"),o=[],i=!1,s=(g,y,x,v=null)=>{o.push({id:g,status:y,detail:x,fix:v}),y==="fail"&&(i=!0)};s("node",In()?"ok":"fail",`node ${process.versions.node}`,In()?null:"install node >= 20.19");let d=e.paths.oracleExecEnvPath(),a=bs(d),p=process.env.ORACLE_ROUTE_ATTESTATION_SECRET||process.env.MAD_ROUTE_ATTESTATION_SECRET||process.env.ORACLE_ATTESTATION_SECRET||process.env.ORACLE_STAMP_HMAC_SECRET||a.ORACLE_ROUTE_ATTESTATION_SECRET||a.MAD_ROUTE_ATTESTATION_SECRET||a.ORACLE_ATTESTATION_SECRET||a.ORACLE_STAMP_HMAC_SECRET;s("attestation_secret",p?"ok":"warn",p?"present":"missing",p?null:"run oracle init --apply (writes ~/.config/oracle/exec.env)");let m=process.env.ORACLE_DATA_URL||"http://127.0.0.1:8787",c=await Es(m),f=e.paths.loadDeskRouting&&(process.env.ORACLE_DESK_URL||process.env.ORACLE_PUBLIC_URL)?`desk ${process.env.ORACLE_DESK_URL||process.env.ORACLE_PUBLIC_URL}`:null;s("data_server",c?"ok":"warn",c?`reachable ${m}${f?` (${f})`:""}`:`down ${m}`,c?null:m.includes("127.0.0.1")||m.includes("localhost")?"oracle data serve OR set ~/.config/oracle/desk.json to YOUR_DESK_HOST":"check the desk URL in ~/.config/oracle/desk.json (/public/health)");let u=Ht();s("harness_model","ok","Oracle native harness is default; external harnesses are inbound MCP only (oracle harness detect)",null),s("hermes_opt_in","ok",u.ok?`detected ${u.bin} (${u.source}) \u2014 unused unless explicitly opted in`:"not detected \u2014 native-only OK",null);let b=kn.join(e.paths.hermesRoot(),"profiles"),w=0;ie.existsSync(b)&&(w=ie.readdirSync(b,{withFileTypes:!0}).filter(g=>g.isDirectory()).length),s("hermes_lanes","ok",w>0?`${w} profile dir(s) (optional surface)`:"no Hermes lane profiles (native-only OK)",null);{let g=kn.join(b,"oracle",".env"),y=[];if(ie.existsSync(g)){let x=ie.readFileSync(g,"utf8");/^TELEGRAM_BOT_TOKEN=.+/m.test(x)&&y.push("telegram"),/^DISCORD_BOT_TOKEN=.+/m.test(x)&&y.push("discord"),/^SLACK_BOT_TOKEN=.+/m.test(x)&&y.push("slack")}y.length?u.ok?s("messaging","ok",`${y.join("/")} configured \xB7 runtime ${u.source}`,null):s("messaging","warn",`${y.join("/")} token set but messaging runtime missing \u2014 bot cannot answer`,"oracle bootstrap, then oracle setup gateway restart"):s("messaging","ok","no channel tokens configured (optional \u2014 oracle setup)",null)}let h=null;if(r){h=Yt(process.env);for(let g of h.checks)s(`agentic_${g.id}`,g.status,g.detail,null)}let I=null;if(n){let{firstHourReport:g,probeReviewModule:y,probeReceiptModule:x}=await Promise.resolve().then(()=>(qt(),Sn)),{probeSigner:v,probeQuote:E}=await Promise.resolve().then(()=>(vn(),An)),[_,K,C,B]=await Promise.all([v(process.env),E(),y(),x()]);I=g({signerReachable:_,quote:K,reviewAvailable:C,receiptAvailable:B});for(let D of I.checks)s(`hour_${D.id}`,D.status,D.detail,D.fix);s("hour_score",I.ok?"ok":"warn",I.firstRunScore.label,null)}let O={ok:!i&&(h?h.ok:!0)&&(I?I.ok:!0),checks:o,...I?{firstHour:I}:{},...h?{agentic:{pct:h.pct,summary:h.summary,attributes:h.attributes,researchMode:h.researchMode}}:{}};if(t)process.stdout.write(JSON.stringify(O,null,2)+`
|
|
7
7
|
`);else{for(let g of o)process.stdout.write(`${g.status.toUpperCase().padEnd(4)} ${g.id}: ${g.detail}
|
|
8
8
|
`),g.fix&&process.stdout.write(` fix: ${g.fix}
|
|
9
9
|
`);h&&process.stdout.write(`
|
|
10
10
|
${h.summary}
|
|
11
|
-
`)}return O.ok?0:1}};export{
|
|
11
|
+
`)}return O.ok?0:1}};export{$m as default};
|