@oracle-agent/oracle 0.35.55 → 0.35.56
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/bin/desk-server.mjs +1 -1
- package/dist/cli/commands/chat.mjs +221 -221
- package/dist/cli/commands/data.mjs +1 -1
- package/dist/cli/commands/doctor.mjs +5 -5
- package/dist/cli/commands/eval.mjs +150 -150
- package/dist/cli/commands/farm.mjs +16 -16
- package/dist/cli/commands/model.mjs +223 -223
- package/dist/cli/commands/quickstart.mjs +6 -6
- package/dist/cli/commands/sign.mjs +14 -14
- package/dist/cli/commands/signer.mjs +32 -25
- package/dist/cli/commands/venues.mjs +2 -2
- package/dist/data/desk-data.mjs +22 -22
- package/dist/data/providers/farming.mjs +2 -2
- package/dist/index.mjs +31 -31
- package/dist/local-signer/anvil-attestation-worker.mjs +1 -1
- package/dist/local-signer/index.mjs +5 -5
- package/dist/local-signer/runtime.mjs +21 -22
- package/dist/teams/index.mjs +7 -7
- package/dist/tui/standalone-client.mjs +102 -102
- package/package.json +1 -1
- package/public/oracle-splash/docs/browser-and-web/index.html +2 -2
- package/public/oracle-splash/docs/connectors/index.html +2 -2
- package/public/oracle-splash/docs/getting-started/index.html +2 -2
- package/public/oracle-splash/docs/index.html +3 -3
- package/public/oracle-splash/docs/reference/index.html +2 -2
- package/public/oracle-splash/docs/security/index.html +2 -2
- package/public/oracle-splash/docs/using-oracle/index.html +2 -2
- package/public/oracle-splash/download/index.html +3 -3
- package/public/oracle-splash/downloads/index.html +1 -1
- package/public/oracle-splash/index.html +6 -6
- package/server.json +2 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var le=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(i){throw r=[i],i}};var ue=le(()=>{});var ho,go,C=le(()=>{ho=300*1e3,go=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});import Mt from"node:fs";import{JsonRpcProvider as Ht}from"ethers";import{Interface as ne,keccak256 as Ft}from"ethers";import{Transaction as bu}from"@scure/btc-signer";import{ed25519 as xu}from"@noble/curves/ed25519.js";import{Interface as Ve,MaxUint256 as Sr,isAddress as Ar,keccak256 as vr,toUtf8Bytes as Ir}from"ethers";import{Interface as We,isAddress as nr}from"ethers";import{isAddress as Xt}from"ethers";var ar=new We(["function approve(address spender,uint256 amount) returns (bool)"]);import{Interface as Ue,isAddress as ur}from"ethers";var mr=new Ue(["function approve(address spender,uint256 amount) returns (bool)"]),wr=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"});var _r=new Ve(["function approve(address spender,uint256 amount) returns (bool)"]);ue();import{readFileSync as Pr,readdirSync as Br,existsSync as Je}from"node:fs";import{dirname as Ke,join as E}from"node:path";import{fileURLToPath as Ge}from"node:url";var x=Ke(Ge(import.meta.url));function Ye(){let e=[E(x,"descriptors"),E(x,"clear-sign","descriptors"),E(x,"..","clear-sign","descriptors"),E(x,"..","..","clear-sign","descriptors"),E(x,"..","..","..","clear-sign","descriptors")];for(let t of e)if(Je(t))return t;return e[0]}var qr=Ye();var Mr=(1n<<256n)-1n;import{Address as Yr,NETWORK as Xr,OutScript as Zr,RawTx as Qr,SigHash as en,TEST_NETWORK as tn,Transaction as rn}from"@scure/btc-signer";import{createHash as Xe}from"node:crypto";import{base58 as an}from"@scure/base";import{getCompiledTransactionMessageDecoder as ln}from"@solana/transaction-messages";var de=e=>Xe("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),un=new Map([[de("route"),{name:"route",prefixBytes:0}],[de("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]]);import{AsyncLocalStorage as Ze}from"node:async_hooks";var pn=new Ze;var An=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"aborted")?.get,vn=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"reason")?.get,In=AbortSignal.prototype.throwIfAborted,kn=EventTarget.prototype.addEventListener,On=EventTarget.prototype.removeEventListener,Tn=typeof AbortSignal.any=="function"?AbortSignal.any.bind(AbortSignal):null;var Nn=64*1024,Cn=Object.freeze({depth:32,nodes:1e4,fields:1e4,arrayLength:1e4,bytes:1024*1024});var qn=Object.freeze({tradexyz:"xyz",ventuals:"vntl",hypernova:"hyna",paradex:"para",entropy:"io",entropyio:"io"});var Un=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"}),Vn=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 Gn="0x"+"00".repeat(32);var et=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),eo=Object.freeze(et.map(e=>e[0]));import{base58 as es}from"@scure/base";import{Interface as be}from"ethers";C();import{TypedDataEncoder as Ko,getAddress as Go}from"ethers";C();import{TypedDataEncoder as So,getAddress as Ao,isAddress as vo}from"ethers";var rt=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),nt=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"}]});import{TypedDataEncoder as Po,getAddress as Bo,isAddress as Do}from"ethers";var Oo=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"});C();var ot=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),Wo=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"});var it=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"}]}),Uo=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]});var Zo=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"]);var ct=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]);var wi=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});var lt=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"}}),hi=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),gi=new be(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),yi=new be(["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"]),bi=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"}});var ut=Object.freeze([...ct]),Ei=Object.freeze({...lt});import{ed25519 as Bi}from"@noble/curves/ed25519.js";import{base58 as Fi}from"@scure/base";import{RawTx as qi,SigHash as Mi,Transaction as Hi}from"@scure/btc-signer";import{Transaction as Wi,keccak256 as Ui,verifyTypedData as Vi}from"ethers";import{encode as Ai}from"@msgpack/msgpack";import{keccak256 as Ii,verifyTypedData as ki}from"ethers";var Oi=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Ti=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]});import{closeSync as hs,constants as mt,fchmodSync as gs,fsyncSync as ys,lstatSync as bs,mkdirSync as Es,openSync as xs,readFileSync as Ss,renameSync as As,rmSync as vs,writeFileSync as Is}from"node:fs";import{wordlists as ps}from"ethers";var Ts=mt.O_NOFOLLOW??0;import{wordlists as _s}from"ethers";var xe=64*1024;var Ls=32*1024;var gt=["schemaVersion","buildVersion","recordType","execution","custody"],Bs=[...gt,"recordHash"];var Ds=Object.freeze({signed:new Set(["workflow.signed","legacy.signed"]),submitted:new Set(["workflow.submitted","legacy.broadcast"]),finalized:new Set(["workflow.finalized"]),reorged:new Set(["workflow.reorged"]),orphaned:new Set(["workflow.orphaned"]),compensating:new Set(["workflow.compensating"]),compensated:new Set(["workflow.compensated"])});var yt=Object.freeze(["draft","checked","approval","signed","submitted","finalized","reorged","orphaned","compensating","compensated","failed","cancelled"]),Ce=Object.freeze(["workflow.drafted","workflow.checked","workflow.approval_requested","workflow.approval_granted","workflow.signed","workflow.submitted","workflow.finalized","workflow.reorged","workflow.orphaned","workflow.compensating","workflow.compensated","workflow.failed","workflow.cancelled","workflow.annotated"]),Hs=new Set(Ce);var vt=64*1024*1024;var Gs=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),Ys=Object.freeze(["read","simulate"]);var Xs=1440*60;var sa=Object.freeze(["privkey","wif","xprv","seed"]);var aa=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}]),ca=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"]);var Z=Object.freeze(["intent","quote_comparison","simulation","prepared","approval","signed","broadcast","settlement","balance_delta","position"]),fa=Object.freeze(Object.fromEntries(Z.map((e,t)=>[e,Object.freeze(t+1<Z.length?[Z[t+1]]:[])])));var It=Object.freeze({intent:"draft",quote_comparison:"draft",simulation:"draft",prepared:"checked",approval:"approval",signed:"signed",broadcast:"submitted",settlement:"finalized",balance_delta:"compensated",position:"compensated"});var Ot=Object.freeze(["owner","operator","agent","viewer"]),Tt=Object.freeze(["tenant","config","policy","grant","workflow","trade","receipt","audit","telemetry","context","lifecycle"]),Nt=Object.freeze({read:"read",create:"create",update:"update",delete:"delete",manage:"manage",prepare:"prepare",cancel:"cancel",export:"export",approve:"approve"}),Ya=Object.freeze(["owner"]),Xa=Object.freeze({ALLOW_ROLE_PERMISSION:"allow.role_permission",DENY_MISSING_CONTEXT:"deny.missing_context",DENY_INVALID_CONTEXT:"deny.invalid_context",DENY_INVALID_REQUEST:"deny.invalid_request",DENY_UNKNOWN_RESOURCE:"deny.unknown_resource",DENY_UNKNOWN_ACTION:"deny.unknown_action",DENY_UNBOUND_OBJECT:"deny.unbound_object",DENY_TENANT_MISMATCH:"deny.tenant_mismatch",DENY_RESOURCE_MISMATCH:"deny.resource_mismatch",DENY_ROLE_PERMISSION:"deny.role_permission",DENY_POLICY_NOT_APPROVER:"deny.policy_not_approver"}),Za=new Set(Ot),Qa=new Set(Tt),ec=new Set(Object.values(Nt));var Ct=Object.freeze({owner:Object.freeze(["tenant:read","tenant:manage","config:read","config:manage","policy:read","policy:manage","grant:read","grant:create","grant:update","grant:delete","grant:manage","workflow:read","workflow:create","workflow:update","workflow:delete","workflow:cancel","workflow:approve","trade:read","trade:prepare","receipt:read","receipt:export","audit:read","audit:export","telemetry:read","telemetry:create","telemetry:export","context:read","context:create","context:update","context:delete","context:manage","context:export","lifecycle:read","lifecycle:create","lifecycle:update","lifecycle:delete","lifecycle:manage","lifecycle:approve","lifecycle:export"]),operator:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","workflow:cancel","trade:read","trade:prepare","receipt:read","audit:read","telemetry:read","telemetry:create","context:read","context:create","context:update","context:delete","lifecycle:read","lifecycle:create","lifecycle:update","lifecycle:manage"]),agent:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","trade:read","trade:prepare","receipt:read","telemetry:create","context:read","context:create","context:update","lifecycle:read"]),viewer:Object.freeze(["tenant:read","config:read","grant:read","workflow:read","trade:read","receipt:read","audit:read","telemetry:read","context:read","lifecycle:read"])}),tc=Object.freeze(Object.fromEntries(Object.entries(Ct).map(([e,t])=>[e,Object.freeze([...t])])));var _t=Object.freeze(["succeeded","denied","invalid","failed","cancelled","timed_out","unavailable","skipped"]),Rt=Object.freeze(["workflow","task","intent","plan","run","event","eval"]),Lt=Object.freeze(["taskId","intentId","planId","runId","eventId"]);var ic=Object.freeze({maxAttributes:24,maxKeyLength:48,maxStringLength:256,maxArrayLength:8}),sc=new Set(_t),ac=new Set(Rt),cc=new Set(Lt);var lc=Object.freeze(["authorization","bearer","cookie","credential","password","passphrase","secret","token","privatekey","privkey","seed","mnemonic","keystore","signature","prompt","systemmessage","usermessage","assistantmessage","rawtransaction","signedtransaction","serializedtransaction","transactionbytes","calldata","callbytes","inputdata"]);var uc=Object.freeze({taskId:"x-oracle-task-id",intentId:"x-oracle-intent-id",planId:"x-oracle-plan-id",runId:"x-oracle-run-id",eventId:"x-oracle-event-id"});var hc=Object.freeze({"workflow.cancelled":"cancelled","workflow.failed":"failed"});var Sc=32*1024*1024;var vc=Object.freeze({N:1<<17,r:8,p:1}),Ic=256*1024*1024,kc=16*1024;var Tc=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 Q}from"node:os";import{join as ee}from"node:path";var _e=process.env.ORACLE_PUBLIC_DESKTOP==="1",$t=_e?process.env.ORACLE_CONFIG_DIR||ee(Q(),".config","oracle"):ee(Q(),".config","oracle"),Rc=_e?$t:ee(Q(),".config","mad-desk");var Dc="0".repeat(64),Fc=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"});var jc=Promise.resolve();import{Wallet as Gc}from"ethers";import{base58 as Xc}from"@scure/base";import{ed25519 as Qc}from"@noble/curves/ed25519.js";import{NETWORK as tl,TEST_NETWORK as rl,WIF as nl,p2wpkh as ol}from"@scure/btc-signer";import{pubECDSA as sl}from"@scure/btc-signer/utils.js";var ll=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),ul=Object.freeze(["binance","bybit","okx","coinbase"]),dl=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),fl=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),pl=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),ml=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),wl=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),hl=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),gl=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),yl=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),bl=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"});var Dt=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}"]})}),Le=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"});var Nl=256*1024;var l=new ne(["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"]),$e=new ne(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),re=new ne(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"]);function c(e,t){let r=String(e||"").toLowerCase();if(!/^0x[0-9a-f]{40}$/.test(r))throw new Error(`signer: invalid ${t}`);return r}function Pe(e,t){return Object.entries(e||{}).find(([r])=>r.toLowerCase()===t)?.[1]}function jt(e,t){let r=e?.anvilQuote;if(!r||typeof r!="object"||Array.isArray(r))throw new Error("signer: exact prepared Anvil quote is required");if(!e?.artifact?.anvilQuote||JSON.stringify(e.artifact.anvilQuote)!==JSON.stringify(r))throw new Error("signer: exact prepared Anvil quote artifact mismatch");return Object.freeze(t==="buy"?{totalCostRaw:BigInt(r.totalCostRaw).toString(),baseCostRaw:BigInt(r.baseCostRaw).toString(),feeRaw:BigInt(r.feeRaw).toString(),protocolFeeRaw:BigInt(r.protocolFeeRaw).toString(),available:r.available===!0}:{netPayoutRaw:BigInt(r.netPayoutRaw).toString(),grossPayoutRaw:BigInt(r.grossPayoutRaw).toString(),feeRaw:BigInt(r.feeRaw).toString(),protocolFeeRaw:BigInt(r.protocolFeeRaw).toString()})}function qt(e,t,r){if(e.preconditions?.exactQuoteConfirmed!==!0)throw new Error("signer: exact prepared Anvil quote confirmation required");let i=e.artifact,p=t==="buy"?[r.totalCostRaw,e.maxPaymentTokenAmountRaw,i?.maxPaymentTokenAmountRaw,e.exactQuoteTotalCostRaw,i?.exactQuoteTotalCostRaw,e.preconditions?.confirmedTotalCostRaw]:[r.netPayoutRaw,e.minPayoutRaw,i?.minPayoutRaw,e.exactQuoteNetPayoutRaw,i?.exactQuoteNetPayoutRaw,e.preconditions?.confirmedNetPayoutRaw],n;try{n=BigInt(p[0]);for(let g of p.slice(1))if(BigInt(g)!==n)throw new Error("mismatch")}catch{throw new Error(`signer: exact Anvil ${t} settlement limit mismatch`)}let d=i?.transactions;if(!Array.isArray(d)||d.length!==1)throw new Error("signer: exact Anvil action transaction required");let h=t==="buy"?"buySpecificNFT":"sellNFT",f;try{if(f=l.decodeFunctionData(h,d[0].data),l.encodeFunctionData(h,[f[0],f[1]]).toLowerCase()!==String(d[0].data).toLowerCase())throw new Error("non-canonical")}catch{throw new Error(`signer: exact Anvil ${t} calldata required`)}if(BigInt(f[0])!==BigInt(e.tokenId)||BigInt(f[1])!==n)throw new Error(`signer: exact Anvil ${t} calldata limit mismatch`);return n}async function u(e,t,r,i,p,n=[]){let d=await e.send("eth_call",[{to:t,data:r.encodeFunctionData(i,n)},p]);return r.decodeFunctionResult(i,d)[0]}async function Be(e,t,r,{nowMs:i=Date.now(),signerAddress:p}={}){if(t?.surface!=="evm-nft"||String(t?.provider).toLowerCase()!=="anvil-nft")return null;if(!e||typeof e.send!="function")throw new Error("signer: trusted RPC cannot attest Anvil market");let n=c(t.destination,"Anvil market"),d=c(t.contract,"Anvil collection"),h=c(t.paymentToken,"Anvil payment token"),f=BigInt(t.nativeSwapFeeWei),g=Number(t.paymentTokenDecimals),y=c(p,"Anvil signer identity"),De=c(t.owner,"Anvil envelope owner");if(y!==De)throw new Error("signer: Anvil signer identity mismatch");let m=BigInt(t.tokenId);if(m<0n)throw new Error("signer: invalid Anvil tokenId");let w=String(t.nftAction||"").toLowerCase();if(w!=="buy"&&w!=="sell")throw new Error("signer: unsupported Anvil NFT action");let R=jt(t,w),L=qt(t,w,R),A=t.anvilAttestation;if(!A||typeof A!="object"||Number(A.snapshotExpiresAtMs)<=Number(i))throw new Error("signer: fresh provider Anvil attestation required");let $=String(Pe(r.anvilRuntimeCodeHashes,n)||"").toLowerCase();if(!/^0x[0-9a-f]{64}$/.test($)||$!==String(A.runtimeCodeHash||"").toLowerCase())throw new Error("signer: Anvil runtime is not reviewed by policy");let oe=Pe(r.nftPaymentTokenCaps,h);if(!oe||Number(oe.decimals)!==g)throw new Error("signer: Anvil payment token decimals are not reviewed by policy");let ie=String(await e.send("eth_chainId",[])).toLowerCase();if(!/^0x(?:0|[1-9a-f][0-9a-f]*)$/.test(ie)||BigInt(ie)!==4663n)throw new Error("signer: trusted RPC Anvil chain mismatch");let v=String(await e.send("eth_blockNumber",[])).toLowerCase();if(!/^0x(?:0|[1-9a-f][0-9a-f]*)$/.test(v))throw new Error("signer: trusted RPC returned an invalid Anvil block number");let Fe=BigInt(v),se=await e.send("eth_getBlockByNumber",[v,!1]),P=String(se?.hash||"").toLowerCase();if(String(se?.number||"").toLowerCase()!==v||!/^0x[0-9a-f]{64}$/.test(P))throw new Error("signer: trusted RPC returned an invalid Anvil block attestation");let s=Object.freeze({blockHash:P,requireCanonical:!0}),B=String(await e.send("eth_getCode",[n,s])).toLowerCase();if(!/^0x[0-9a-f]+$/.test(B)||B==="0x")throw new Error("signer: Anvil market runtime is empty");let ae=Ft(B).toLowerCase();if(ae!==$)throw new Error("signer: Anvil market runtime mismatch with reviewed policy");let[je,qe,Me]=await Promise.all([u(e,n,l,"collection",s),u(e,n,l,"token",s),u(e,n,l,"robinhoodSwapFeeWei",s)]),b=c(je,"live Anvil collection"),I=c(qe,"live Anvil payment token"),ce=BigInt(Me).toString();if(b!==d)throw new Error("signer: live Anvil collection mismatch");if(I!==h)throw new Error("signer: live Anvil payment token mismatch");if(ce!==f.toString())throw new Error("signer: live Anvil native swap fee mismatch");let D=Number(await u(e,I,$e,"decimals",s));if(!Number.isSafeInteger(D)||D!==g)throw new Error("signer: live Anvil payment token decimals mismatch");let F=c(await u(e,b,re,"ownerOf",s,[m]),"live Anvil token owner"),j=null,k=null,O=null,T=null,o;if(w==="buy"){let[q,M,H]=await Promise.all([u(e,n,l,"inventory",s,[m]),u(e,I,$e,"allowance",s,[y,n]),e.send("eth_call",[{to:n,data:l.encodeFunctionData("quoteSpecificBuy",[m])},s])]);j=!!q,k=BigInt(M).toString();let a=l.decodeFunctionResult("quoteSpecificBuy",H);if(o=Object.freeze({totalCostRaw:BigInt(a[0]).toString(),baseCostRaw:BigInt(a[1]).toString(),feeRaw:BigInt(a[2]).toString(),protocolFeeRaw:BigInt(a[3]).toString(),available:!!a[4]}),JSON.stringify(o)!==JSON.stringify(R))throw new Error("signer: exact Anvil buy quote changed after preparation");if(F!==n)throw new Error("signer: exact Anvil token owner is not the market");if(!j)throw new Error("signer: exact Anvil token is not in market inventory");if(BigInt(k)!==BigInt(t.preconditions?.allowanceRaw))throw new Error("signer: live Anvil ERC20 allowance changed after preparation");if(BigInt(k)<L)throw new Error("signer: live Anvil ERC20 allowance is insufficient");if(!o.available)throw new Error("signer: exact Anvil buy quote is unavailable");if(BigInt(o.totalCostRaw)!==L)throw new Error("signer: live Anvil buy quote does not equal exact payment limit");if(BigInt(o.totalCostRaw)!==BigInt(o.baseCostRaw)+BigInt(o.feeRaw)+BigInt(o.protocolFeeRaw))throw new Error("signer: exact Anvil buy quote fee arithmetic mismatch")}else{let[q,M,H]=await Promise.all([u(e,b,re,"getApproved",s,[m]),u(e,b,re,"isApprovedForAll",s,[y,n]),e.send("eth_call",[{to:n,data:l.encodeFunctionData("quoteSellNFT")},s])]);O=c(q,"live Anvil token approval"),T=!!M;let a=l.decodeFunctionResult("quoteSellNFT",H);if(o=Object.freeze({netPayoutRaw:BigInt(a[0]).toString(),grossPayoutRaw:BigInt(a[1]).toString(),feeRaw:BigInt(a[2]).toString(),protocolFeeRaw:BigInt(a[3]).toString()}),JSON.stringify(o)!==JSON.stringify(R))throw new Error("signer: exact Anvil sell quote changed after preparation");if(F!==y)throw new Error("signer: exact Anvil token owner does not match signer");if(O!==n&&!T)throw new Error("signer: live Anvil NFT approval is insufficient");if(O!==c(t.preconditions?.approvedAddress,"prepared Anvil token approval")||T!==!!t.preconditions?.approvedForAll)throw new Error("signer: live Anvil NFT approval changed after preparation");if(BigInt(o.netPayoutRaw)!==L)throw new Error("signer: live Anvil sell quote does not equal exact payout limit");if(BigInt(o.netPayoutRaw)+BigInt(o.feeRaw)+BigInt(o.protocolFeeRaw)!==BigInt(o.grossPayoutRaw))throw new Error("signer: exact Anvil sell quote fee arithmetic mismatch")}return Object.freeze({source:"local-signer-trusted-rpc",chainId:4663,market:n,collection:b,paymentToken:I,paymentTokenDecimals:D,nativeSwapFeeWei:ce,signerAddress:y,nftAction:w,tokenId:m.toString(),tokenOwner:F,inventoryMember:j,allowanceRaw:k,approvedAddress:O,approvedForAll:T,quote:o,blockNumber:Fe.toString(),blockHash:P,runtimeCodeHash:ae,verifiedAtMs:Number(i)})}try{let e=JSON.parse(Mt.readFileSync(0,"utf8")),t=new Ht(e.rpcUrl,Number(e.chainId)),r=await Be(t,e.envelope,e.policy,{nowMs:Number(e.nowMs),signerAddress:e.signerAddress});process.stdout.write(JSON.stringify(r))}catch(e){process.stderr.write(`Anvil attestation failed: ${String(e?.message||e)}
|
|
1
|
+
var de=(e,t,r)=>()=>{if(r)throw r[0];try{return e&&(t=e(e=0)),t}catch(i){throw r=[i],i}};var fe=de(()=>{});var bo,Eo,L=de(()=>{bo=300*1e3,Eo=(()=>{let e=Number(process.env.ORACLE_PREPARE_HARD_MAX_AGE_MS);return Number.isFinite(e)&&e>0?e:1800*1e3})()});import Ut from"node:fs";import{JsonRpcProvider as Vt}from"ethers";import{Interface as ie,keccak256 as Ht}from"ethers";import{Transaction as Mu}from"@scure/btc-signer";import{ed25519 as Fu}from"@noble/curves/ed25519.js";import{Interface as Je,MaxUint256 as kr,isAddress as Or,keccak256 as Tr,toUtf8Bytes as Nr}from"ethers";import{Interface as Ue,isAddress as ar}from"ethers";import{isAddress as tr}from"ethers";var dr=new Ue(["function approve(address spender,uint256 amount) returns (bool)"]);import{Interface as Ve,isAddress as mr}from"ethers";var yr=new Ve(["function approve(address spender,uint256 amount) returns (bool)"]),br=Object.freeze({42161:"0x1c3fa76e6e1088bce750f23a5bfcffa1efef6a41",43114:"0x8f550e53dfe96c055d5bdb267c21f268fcaf63b2"});var Pr=new Je(["function approve(address spender,uint256 amount) returns (bool)"]);fe();import{readFileSync as Fr,readdirSync as jr,existsSync as Ke}from"node:fs";import{dirname as Ge,join as E}from"node:path";import{fileURLToPath as Ye}from"node:url";var x=Ge(Ye(import.meta.url));function Xe(){let e=[E(x,"descriptors"),E(x,"clear-sign","descriptors"),E(x,"..","clear-sign","descriptors"),E(x,"..","..","clear-sign","descriptors"),E(x,"..","..","..","clear-sign","descriptors")];for(let t of e)if(Ke(t))return t;return e[0]}var Wr=Xe();var Ur=(1n<<256n)-1n;import{Address as en,NETWORK as tn,OutScript as rn,RawTx as nn,SigHash as on,TEST_NETWORK as sn,Transaction as an}from"@scure/btc-signer";import{createHash as Ze}from"node:crypto";import{base58 as dn}from"@scure/base";import{getCompiledTransactionMessageDecoder as pn}from"@solana/transaction-messages";var pe=e=>Ze("sha256").update(`global:${e}`).digest().subarray(0,8).toString("hex"),mn=new Map([[pe("route"),{name:"route",prefixBytes:0}],[pe("shared_accounts_route"),{name:"shared_accounts_route",prefixBytes:1}]]);import{AsyncLocalStorage as Qe}from"node:async_hooks";var gn=new Qe;var On=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"aborted")?.get,Tn=Object.getOwnPropertyDescriptor(AbortSignal.prototype,"reason")?.get,Nn=AbortSignal.prototype.throwIfAborted,Cn=EventTarget.prototype.addEventListener,Ln=EventTarget.prototype.removeEventListener,_n=typeof AbortSignal.any=="function"?AbortSignal.any.bind(AbortSignal):null;var Rn=64*1024,$n=Object.freeze({depth:32,nodes:1e4,fields:1e4,arrayLength:1e4,bytes:1024*1024});var Wn=Object.freeze({tradexyz:"xyz",ventuals:"vntl",hypernova:"hyna",paradex:"para",entropy:"io",entropyio:"io"});var Kn=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"}),Gn=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 Zn="0x"+"00".repeat(32);var rt=Object.freeze([["salt","uint256"],["maker","address"],["signer","address"],["tokenId","uint256"],["makerAmount","uint256"],["takerAmount","uint256"],["side","uint8"],["signatureType","uint8"],["timestamp","uint256"],["metadata","bytes32"],["builder","bytes32"]]),no=Object.freeze(rt.map(e=>e[0]));import{base58 as ns}from"@scure/base";import{Interface as Ee}from"ethers";L();import{TypedDataEncoder as Xo,getAddress as Zo}from"ethers";L();import{TypedDataEncoder as Io,getAddress as ko,isAddress as Oo}from"ethers";var ot=Object.freeze({1:"0x111111125421cA6dc452d289314280a0f8842A65",8453:"0x111111125421cA6dc452d289314280a0f8842A65",42161:"0x111111125421cA6dc452d289314280a0f8842A65",10:"0x111111125421cA6dc452d289314280a0f8842A65",137:"0x111111125421cA6dc452d289314280a0f8842A65",56:"0x111111125421cA6dc452d289314280a0f8842A65"}),it=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"}]});import{TypedDataEncoder as Do,getAddress as Fo,isAddress as jo}from"ethers";var Co=Object.freeze({READ:"read",PREPARE:"prepare",EXECUTE:"execute",AUTONOMOUS:"autonomous"});L();var st=Object.freeze({1:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",100:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",42161:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41",8453:"0x9008D19f58AAbD9eD0D60971565AA8510560ab41"}),Jo=Object.freeze({1:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",100:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",42161:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110",8453:"0xC92E8bdf79f0507f65a392b0ab4667716BFE0110"});var at=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"}]}),Ko=Object.freeze({OrderCancellations:[{name:"orderUids",type:"bytes[]"}]});var ti=Object.freeze(["https://limit-orders.1inch.io","https://api.1inch.dev/orderbook"]);var ut=new Set(["evm","evm-swap","evm-bridge","evm-nft","evm-order","btc","sol","hl","poly","lighter"]);var yi=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});var dt=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"}}),bi=Object.freeze({"0x161ac21f":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-public"},"0xc2f6663a":{provider:"opensea-nft",action:"mint",layout:"seadrop-mint-allowlist"}}),Ei=new Ee(["function buySpecificNFT(uint256 tokenId,uint256 maxCost) payable","function sellNFT(uint256 tokenId,uint256 minPayout) payable"]),xi=new Ee(["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"]),Si=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"}});var ft=Object.freeze([...ut]),Ai=Object.freeze({...dt});import{ed25519 as Fi}from"@noble/curves/ed25519.js";import{base58 as qi}from"@scure/base";import{RawTx as zi,SigHash as Wi,Transaction as Ui}from"@scure/btc-signer";import{Transaction as Ji,keccak256 as Ki,verifyTypedData as Gi}from"ethers";import{encode as ki}from"@msgpack/msgpack";import{keccak256 as Ti,verifyTypedData as Ni}from"ethers";var Ci=Object.freeze({name:"Exchange",version:"1",chainId:1337,verifyingContract:"0x0000000000000000000000000000000000000000"}),Li=Object.freeze({Agent:[{name:"source",type:"string"},{name:"connectionId",type:"bytes32"}]});import{closeSync as vs,constants as yt,fchmodSync as Is,fsyncSync as ks,lstatSync as Os,mkdirSync as Ts,openSync as Ns,readFileSync as Cs,renameSync as Ls,rmSync as _s,writeFileSync as Rs}from"node:fs";import{wordlists as hs}from"ethers";import _ from"node:fs";var xs=_.constants.O_CREAT|_.constants.O_EXCL|_.constants.O_WRONLY|(_.constants.O_NOFOLLOW||0);var Ds=yt.O_NOFOLLOW??0;import{wordlists as qs}from"ethers";var Se=64*1024;var zs=32*1024;var xt=["schemaVersion","buildVersion","recordType","execution","custody"],Vs=[...xt,"recordHash"];var Js=Object.freeze({signed:new Set(["workflow.signed","legacy.signed"]),submitted:new Set(["workflow.submitted","legacy.broadcast"]),finalized:new Set(["workflow.finalized"]),reorged:new Set(["workflow.reorged"]),orphaned:new Set(["workflow.orphaned"]),compensating:new Set(["workflow.compensating"]),compensated:new Set(["workflow.compensated"])});var St=Object.freeze(["draft","checked","approval","signed","submitted","finalized","reorged","orphaned","compensating","compensated","failed","cancelled"]),Le=Object.freeze(["workflow.drafted","workflow.checked","workflow.approval_requested","workflow.approval_granted","workflow.signed","workflow.submitted","workflow.finalized","workflow.reorged","workflow.orphaned","workflow.compensating","workflow.compensated","workflow.failed","workflow.cancelled","workflow.annotated"]),Zs=new Set(Le);var Tt=64*1024*1024;var ia=Object.freeze(["chainId","agentAddress","accountAddress","actions","targets","maxValueWei","maxGasWei","maxSlippageBps","expiresAt","nonce","revocationKey"]),sa=Object.freeze(["read","simulate"]);var aa=1440*60;var ha=Object.freeze(["privkey","wif","xprv","seed"]);var ga=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}]),ya=Object.freeze(["grantid","id","hash","sha256","sha256hex","checksum","txhash","transactionhash","blockhash","digest","userophash","commithash","prevhash","intenthash","canonicalhash","payloadhash","requestid"]);var ee=Object.freeze(["intent","quote_comparison","simulation","prepared","approval","signed","broadcast","settlement","balance_delta","position"]),Sa=Object.freeze(Object.fromEntries(ee.map((e,t)=>[e,Object.freeze(t+1<ee.length?[ee[t+1]]:[])])));var Nt=Object.freeze({intent:"draft",quote_comparison:"draft",simulation:"draft",prepared:"checked",approval:"approval",signed:"signed",broadcast:"submitted",settlement:"finalized",balance_delta:"compensated",position:"compensated"});var Lt=Object.freeze(["owner","operator","agent","viewer"]),_t=Object.freeze(["tenant","config","policy","grant","workflow","trade","receipt","audit","telemetry","context","lifecycle"]),Rt=Object.freeze({read:"read",create:"create",update:"update",delete:"delete",manage:"manage",prepare:"prepare",cancel:"cancel",export:"export",approve:"approve"}),sc=Object.freeze(["owner"]),ac=Object.freeze({ALLOW_ROLE_PERMISSION:"allow.role_permission",DENY_MISSING_CONTEXT:"deny.missing_context",DENY_INVALID_CONTEXT:"deny.invalid_context",DENY_INVALID_REQUEST:"deny.invalid_request",DENY_UNKNOWN_RESOURCE:"deny.unknown_resource",DENY_UNKNOWN_ACTION:"deny.unknown_action",DENY_UNBOUND_OBJECT:"deny.unbound_object",DENY_TENANT_MISMATCH:"deny.tenant_mismatch",DENY_RESOURCE_MISMATCH:"deny.resource_mismatch",DENY_ROLE_PERMISSION:"deny.role_permission",DENY_POLICY_NOT_APPROVER:"deny.policy_not_approver"}),cc=new Set(Lt),lc=new Set(_t),uc=new Set(Object.values(Rt));var $t=Object.freeze({owner:Object.freeze(["tenant:read","tenant:manage","config:read","config:manage","policy:read","policy:manage","grant:read","grant:create","grant:update","grant:delete","grant:manage","workflow:read","workflow:create","workflow:update","workflow:delete","workflow:cancel","workflow:approve","trade:read","trade:prepare","receipt:read","receipt:export","audit:read","audit:export","telemetry:read","telemetry:create","telemetry:export","context:read","context:create","context:update","context:delete","context:manage","context:export","lifecycle:read","lifecycle:create","lifecycle:update","lifecycle:delete","lifecycle:manage","lifecycle:approve","lifecycle:export"]),operator:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","workflow:cancel","trade:read","trade:prepare","receipt:read","audit:read","telemetry:read","telemetry:create","context:read","context:create","context:update","context:delete","lifecycle:read","lifecycle:create","lifecycle:update","lifecycle:manage"]),agent:Object.freeze(["tenant:read","config:read","policy:read","grant:read","workflow:read","workflow:create","workflow:update","trade:read","trade:prepare","receipt:read","telemetry:create","context:read","context:create","context:update","lifecycle:read"]),viewer:Object.freeze(["tenant:read","config:read","grant:read","workflow:read","trade:read","receipt:read","audit:read","telemetry:read","context:read","lifecycle:read"])}),dc=Object.freeze(Object.fromEntries(Object.entries($t).map(([e,t])=>[e,Object.freeze([...t])])));var Pt=Object.freeze(["succeeded","denied","invalid","failed","cancelled","timed_out","unavailable","skipped"]),Bt=Object.freeze(["workflow","task","intent","plan","run","event","eval"]),Mt=Object.freeze(["taskId","intentId","planId","runId","eventId"]);var wc=Object.freeze({maxAttributes:24,maxKeyLength:48,maxStringLength:256,maxArrayLength:8}),hc=new Set(Pt),gc=new Set(Bt),yc=new Set(Mt);var bc=Object.freeze(["authorization","bearer","cookie","credential","password","passphrase","secret","token","privatekey","privkey","seed","mnemonic","keystore","signature","prompt","systemmessage","usermessage","assistantmessage","rawtransaction","signedtransaction","serializedtransaction","transactionbytes","calldata","callbytes","inputdata"]);var Ec=Object.freeze({taskId:"x-oracle-task-id",intentId:"x-oracle-intent-id",planId:"x-oracle-plan-id",runId:"x-oracle-run-id",eventId:"x-oracle-event-id"});var kc=Object.freeze({"workflow.cancelled":"cancelled","workflow.failed":"failed"});var _c=32*1024*1024;var $c=Object.freeze({N:1<<17,r:8,p:1}),Pc=256*1024*1024,Bc=16*1024;var Dc=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 te}from"node:os";import{join as re}from"node:path";var _e=process.env.ORACLE_PUBLIC_DESKTOP==="1",Dt=_e?process.env.ORACLE_CONFIG_DIR||re(te(),".config","oracle"):re(te(),".config","oracle"),Hc=_e?Dt:re(te(),".config","mad-desk");var Jc="0".repeat(64),Kc=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"});var Gc=Promise.resolve();import{Wallet as cl}from"ethers";import{base58 as ul}from"@scure/base";import{ed25519 as fl}from"@noble/curves/ed25519.js";import{NETWORK as ml,TEST_NETWORK as wl,WIF as hl,p2wpkh as gl}from"@scure/btc-signer";import{pubECDSA as bl}from"@scure/btc-signer/utils.js";var Sl=Object.freeze(["spot-limit-create","spot-limit-cancel","spot-order-status"]),Al=Object.freeze(["binance","bybit","okx","coinbase"]),vl=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"}),Il=Object.freeze({binance:"/api/v3",bybit:"/v5/order",okx:"/api/v5/trade",coinbase:"/orders"}),kl=Object.freeze(["version","surface","kind","venue","credentialRef","symbol","base","quote","side","baseSize","limitPrice","maxQuoteNotional","timeInForce","clientOrderId","expiresAtMs","venueOrderId","nonce","grantId","artifactHash"]),Ol=Object.freeze(["market-create","withdraw","transfer","subaccount","leverage","futures","margin","convert","api-key"]),Tl=Object.freeze(["url","host","path","method","headers","signature","apiKey","apiSecret","passphrase","privateKey","redirect","proxy"]),Nl=Object.freeze(["ccxt","binance-api-node","node-binance-api","coinbase-advanced-node","@okx-dex/okx-dex-sdk","bybit-api"]),Cl=Object.freeze({perOrderQuote:"sealed-owner-policy",dailyGrossQuote:"sealed-owner-policy",scope:Object.freeze(["per-order","UTC-day","account","venue","quote"]),envelopeFieldIsNotCeiling:!0}),Ll=Object.freeze({binanceRecvWindowMs:5e3,bybitWindowMs:5e3,maxLocalSkewMs:2e3}),_l=Object.freeze({perSecond:1,perMinute:30,bind:"tighter"});var qt=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}"]})}),$e=Object.freeze({binance:"https://api.binance.com",bybit:"https://api.bybit.com",okx:"https://openapi.okx.com",coinbase:"https://api.exchange.coinbase.com"});var Hl=256*1024;var l=new ie(["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"]),Pe=new ie(["function decimals() view returns (uint8)","function allowance(address owner,address spender) view returns (uint256)"]),oe=new ie(["function ownerOf(uint256 tokenId) view returns (address)","function getApproved(uint256 tokenId) view returns (address)","function isApprovedForAll(address owner,address operator) view returns (bool)"]);function c(e,t){let r=String(e||"").toLowerCase();if(!/^0x[0-9a-f]{40}$/.test(r))throw new Error(`signer: invalid ${t}`);return r}function Be(e,t){return Object.entries(e||{}).find(([r])=>r.toLowerCase()===t)?.[1]}function zt(e,t){let r=e?.anvilQuote;if(!r||typeof r!="object"||Array.isArray(r))throw new Error("signer: exact prepared Anvil quote is required");if(!e?.artifact?.anvilQuote||JSON.stringify(e.artifact.anvilQuote)!==JSON.stringify(r))throw new Error("signer: exact prepared Anvil quote artifact mismatch");return Object.freeze(t==="buy"?{totalCostRaw:BigInt(r.totalCostRaw).toString(),baseCostRaw:BigInt(r.baseCostRaw).toString(),feeRaw:BigInt(r.feeRaw).toString(),protocolFeeRaw:BigInt(r.protocolFeeRaw).toString(),available:r.available===!0}:{netPayoutRaw:BigInt(r.netPayoutRaw).toString(),grossPayoutRaw:BigInt(r.grossPayoutRaw).toString(),feeRaw:BigInt(r.feeRaw).toString(),protocolFeeRaw:BigInt(r.protocolFeeRaw).toString()})}function Wt(e,t,r){if(e.preconditions?.exactQuoteConfirmed!==!0)throw new Error("signer: exact prepared Anvil quote confirmation required");let i=e.artifact,p=t==="buy"?[r.totalCostRaw,e.maxPaymentTokenAmountRaw,i?.maxPaymentTokenAmountRaw,e.exactQuoteTotalCostRaw,i?.exactQuoteTotalCostRaw,e.preconditions?.confirmedTotalCostRaw]:[r.netPayoutRaw,e.minPayoutRaw,i?.minPayoutRaw,e.exactQuoteNetPayoutRaw,i?.exactQuoteNetPayoutRaw,e.preconditions?.confirmedNetPayoutRaw],n;try{n=BigInt(p[0]);for(let g of p.slice(1))if(BigInt(g)!==n)throw new Error("mismatch")}catch{throw new Error(`signer: exact Anvil ${t} settlement limit mismatch`)}let d=i?.transactions;if(!Array.isArray(d)||d.length!==1)throw new Error("signer: exact Anvil action transaction required");let h=t==="buy"?"buySpecificNFT":"sellNFT",f;try{if(f=l.decodeFunctionData(h,d[0].data),l.encodeFunctionData(h,[f[0],f[1]]).toLowerCase()!==String(d[0].data).toLowerCase())throw new Error("non-canonical")}catch{throw new Error(`signer: exact Anvil ${t} calldata required`)}if(BigInt(f[0])!==BigInt(e.tokenId)||BigInt(f[1])!==n)throw new Error(`signer: exact Anvil ${t} calldata limit mismatch`);return n}async function u(e,t,r,i,p,n=[]){let d=await e.send("eth_call",[{to:t,data:r.encodeFunctionData(i,n)},p]);return r.decodeFunctionResult(i,d)[0]}async function Me(e,t,r,{nowMs:i=Date.now(),signerAddress:p}={}){if(t?.surface!=="evm-nft"||String(t?.provider).toLowerCase()!=="anvil-nft")return null;if(!e||typeof e.send!="function")throw new Error("signer: trusted RPC cannot attest Anvil market");let n=c(t.destination,"Anvil market"),d=c(t.contract,"Anvil collection"),h=c(t.paymentToken,"Anvil payment token"),f=BigInt(t.nativeSwapFeeWei),g=Number(t.paymentTokenDecimals),y=c(p,"Anvil signer identity"),De=c(t.owner,"Anvil envelope owner");if(y!==De)throw new Error("signer: Anvil signer identity mismatch");let m=BigInt(t.tokenId);if(m<0n)throw new Error("signer: invalid Anvil tokenId");let w=String(t.nftAction||"").toLowerCase();if(w!=="buy"&&w!=="sell")throw new Error("signer: unsupported Anvil NFT action");let $=zt(t,w),P=Wt(t,w,$),A=t.anvilAttestation;if(!A||typeof A!="object"||Number(A.snapshotExpiresAtMs)<=Number(i))throw new Error("signer: fresh provider Anvil attestation required");let B=String(Be(r.anvilRuntimeCodeHashes,n)||"").toLowerCase();if(!/^0x[0-9a-f]{64}$/.test(B)||B!==String(A.runtimeCodeHash||"").toLowerCase())throw new Error("signer: Anvil runtime is not reviewed by policy");let se=Be(r.nftPaymentTokenCaps,h);if(!se||Number(se.decimals)!==g)throw new Error("signer: Anvil payment token decimals are not reviewed by policy");let ae=String(await e.send("eth_chainId",[])).toLowerCase();if(!/^0x(?:0|[1-9a-f][0-9a-f]*)$/.test(ae)||BigInt(ae)!==4663n)throw new Error("signer: trusted RPC Anvil chain mismatch");let v=String(await e.send("eth_blockNumber",[])).toLowerCase();if(!/^0x(?:0|[1-9a-f][0-9a-f]*)$/.test(v))throw new Error("signer: trusted RPC returned an invalid Anvil block number");let Fe=BigInt(v),ce=await e.send("eth_getBlockByNumber",[v,!1]),M=String(ce?.hash||"").toLowerCase();if(String(ce?.number||"").toLowerCase()!==v||!/^0x[0-9a-f]{64}$/.test(M))throw new Error("signer: trusted RPC returned an invalid Anvil block attestation");let s=Object.freeze({blockHash:M,requireCanonical:!0}),D=String(await e.send("eth_getCode",[n,s])).toLowerCase();if(!/^0x[0-9a-f]+$/.test(D)||D==="0x")throw new Error("signer: Anvil market runtime is empty");let le=Ht(D).toLowerCase();if(le!==B)throw new Error("signer: Anvil market runtime mismatch with reviewed policy");let[je,qe,He]=await Promise.all([u(e,n,l,"collection",s),u(e,n,l,"token",s),u(e,n,l,"robinhoodSwapFeeWei",s)]),b=c(je,"live Anvil collection"),I=c(qe,"live Anvil payment token"),ue=BigInt(He).toString();if(b!==d)throw new Error("signer: live Anvil collection mismatch");if(I!==h)throw new Error("signer: live Anvil payment token mismatch");if(ue!==f.toString())throw new Error("signer: live Anvil native swap fee mismatch");let F=Number(await u(e,I,Pe,"decimals",s));if(!Number.isSafeInteger(F)||F!==g)throw new Error("signer: live Anvil payment token decimals mismatch");let j=c(await u(e,b,oe,"ownerOf",s,[m]),"live Anvil token owner"),q=null,k=null,O=null,T=null,o;if(w==="buy"){let[H,z,W]=await Promise.all([u(e,n,l,"inventory",s,[m]),u(e,I,Pe,"allowance",s,[y,n]),e.send("eth_call",[{to:n,data:l.encodeFunctionData("quoteSpecificBuy",[m])},s])]);q=!!H,k=BigInt(z).toString();let a=l.decodeFunctionResult("quoteSpecificBuy",W);if(o=Object.freeze({totalCostRaw:BigInt(a[0]).toString(),baseCostRaw:BigInt(a[1]).toString(),feeRaw:BigInt(a[2]).toString(),protocolFeeRaw:BigInt(a[3]).toString(),available:!!a[4]}),JSON.stringify(o)!==JSON.stringify($))throw new Error("signer: exact Anvil buy quote changed after preparation");if(j!==n)throw new Error("signer: exact Anvil token owner is not the market");if(!q)throw new Error("signer: exact Anvil token is not in market inventory");if(BigInt(k)!==BigInt(t.preconditions?.allowanceRaw))throw new Error("signer: live Anvil ERC20 allowance changed after preparation");if(BigInt(k)<P)throw new Error("signer: live Anvil ERC20 allowance is insufficient");if(!o.available)throw new Error("signer: exact Anvil buy quote is unavailable");if(BigInt(o.totalCostRaw)!==P)throw new Error("signer: live Anvil buy quote does not equal exact payment limit");if(BigInt(o.totalCostRaw)!==BigInt(o.baseCostRaw)+BigInt(o.feeRaw)+BigInt(o.protocolFeeRaw))throw new Error("signer: exact Anvil buy quote fee arithmetic mismatch")}else{let[H,z,W]=await Promise.all([u(e,b,oe,"getApproved",s,[m]),u(e,b,oe,"isApprovedForAll",s,[y,n]),e.send("eth_call",[{to:n,data:l.encodeFunctionData("quoteSellNFT")},s])]);O=c(H,"live Anvil token approval"),T=!!z;let a=l.decodeFunctionResult("quoteSellNFT",W);if(o=Object.freeze({netPayoutRaw:BigInt(a[0]).toString(),grossPayoutRaw:BigInt(a[1]).toString(),feeRaw:BigInt(a[2]).toString(),protocolFeeRaw:BigInt(a[3]).toString()}),JSON.stringify(o)!==JSON.stringify($))throw new Error("signer: exact Anvil sell quote changed after preparation");if(j!==y)throw new Error("signer: exact Anvil token owner does not match signer");if(O!==n&&!T)throw new Error("signer: live Anvil NFT approval is insufficient");if(O!==c(t.preconditions?.approvedAddress,"prepared Anvil token approval")||T!==!!t.preconditions?.approvedForAll)throw new Error("signer: live Anvil NFT approval changed after preparation");if(BigInt(o.netPayoutRaw)!==P)throw new Error("signer: live Anvil sell quote does not equal exact payout limit");if(BigInt(o.netPayoutRaw)+BigInt(o.feeRaw)+BigInt(o.protocolFeeRaw)!==BigInt(o.grossPayoutRaw))throw new Error("signer: exact Anvil sell quote fee arithmetic mismatch")}return Object.freeze({source:"local-signer-trusted-rpc",chainId:4663,market:n,collection:b,paymentToken:I,paymentTokenDecimals:F,nativeSwapFeeWei:ue,signerAddress:y,nftAction:w,tokenId:m.toString(),tokenOwner:j,inventoryMember:q,allowanceRaw:k,approvedAddress:O,approvedForAll:T,quote:o,blockNumber:Fe.toString(),blockHash:M,runtimeCodeHash:le,verifiedAtMs:Number(i)})}try{let e=JSON.parse(Ut.readFileSync(0,"utf8")),t=new Vt(e.rpcUrl,Number(e.chainId)),r=await Me(t,e.envelope,e.policy,{nowMs:Number(e.nowMs),signerAddress:e.signerAddress});process.stdout.write(JSON.stringify(r))}catch(e){process.stderr.write(`Anvil attestation failed: ${String(e?.message||e)}
|
|
2
2
|
`),process.exitCode=1}
|